SlideShare uma empresa Scribd logo
1 de 48
Dicas para migrar sua aplicação
ASP.NET para ASP.NET Core
#VSSUMMIT
DEVO MIGRAR PARA ASP.NET CORE
SE…
Desempenho é algo obrigatório (Kestrel delivers 7M req/sec)
Suporte multiplataforma é necessário
Ambiente Enterprise (muitas aplicações em mesmo server, diferentes frameworks, etc)
Se o update de 6 meses para Open Source é algo aceitável
Sua aplicação já é ASP.NET MVC, WebAPI, ou SignalR
NÃO MIGRAR PARA ASP.NET CORE
SE…
Você acha legal, novo ou só porque seus amigos estão usando
Sua aplicação precisa trabalhar com containers
Você precisa de Injeção de Dependência em todos os lugares
Você gosta de web.config
A sua aplicação funciona bem e entrega o que precisa para o seu negócio
Visão da plataforma .NET atualmente
LIBRARIES
INFRASTRUCTURE
.NET STANDARD
DESKTOP WEB CLOUD MOBILE GAMING IoT AI
NEWTONSOFT.JSONPacote de
Exemplo
DOTNETOPENAUTHPacote de
Exemplo
ARQUIVO CSPROJ NO ASP.NET
4.6.1
ARQUIVO CSPROJ NO ASP.NET
CORE 2.1
PREOCUPAÇÕES COM O
STARTUP.CS
 Certifique-se de que o middleware para solicitações MVC/WebAPI esteja configurado corretamente
 Revise e adicione configuração para:
o CORS – Cross-Origin Resource Sharing
o Global Exception Handling
o MVC Routing
o MVC / WebAPI Filters
o WebAPI Formatters
o Model Binders
o Areas
o Authentication
CONFIGURAÇÃO CORS
services.AddCors(options =>
{
options.AddPolicy("AllowAnyOrigin",
builder => builder
.AllowAnyMethod()
.AllowAnyHeader());
});
MANIPULAÇÃO DE EXCEPTIONS
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
FILTERS
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader",
"Resultado do filter adicionado para o GlobalHeader")); // uma instância
options.Filters.Add(typeof(SampleActionFilter)); // por type
options.Filters.Add(new SampleGlobalActionFilter()); // uma instância
});
services.AddScoped<AddHeaderFilterWithDi>();
}
FORMATTERS
public class VcardOutputFormatter : TextOutputFormatter
public class VcardInputFormatter : TextInputFormatter
services.AddMvc(options =>
{
options.InputFormatters.Insert(0, new VcardInputFormatter());
options.OutputFormatters.Insert(0, new VcardOutputFormatter());
});
CRIE UM MIDDLEWARE
 Software montado em um pipeline
 Lida com solicitações e respostas,
BeginRequest e EndRequest
 Sua classe Middleware deve manipular um
Delegate
MANIPULE O MIDDLEWARE
O manipulador processa a solicitação e entrega
RequestDelegate
Request
USANDO O NOVO MIDDLEWARE
app.UseMiddleware<MyMiddleware>();
app.MapWhen(
context =>
context.Request.Path.ToString().EndsWith(".report"),
appBranch => {
appBranch.UseMiddleware<MyHandlerMiddleware Handler>();
});
INJEÇÃO DE DEPENDÊNCIA
INTEGRADA
 Padrão DI nativo
 Controle simples e eficiente em três escopos:
 Transient: todos diferentes. Nova instância para todos controladores e serviços
 Scoped: mesma instância para a mesma request, porém diferente em requests diferentes
 Singleton: mesma instância. Para todos os objetos e requests
 Startup.ConfigureServices ()
COMPATIBILIDADE DA WEBAPI
 Incluir o Microsoft.AspNetCore.Mvc.WebApiCompatShim para facilitar a
compatibilidade com o Web API 2.
 O máximo que puder, sempre migre pra usar o [ApiController]
 Se você estiver usando HttpResponseMessage em seus Web Api Controllers, você
precisará fazer uma pequena alteração de código na sua classe de inicialização para
chamar AddWebApiConventions().
services.AddMvc().AddWebApiConventions()
 Dependendo de como você deseja fazer o roteamento com o Web API, talvez seja necessário
registrar as rotas para ele na sua classe de inicialização.
routes.MapWebApiRoute(name: "DefaultApi",
template: "api/{controller}/{id?}");
ESTRATÉGIAS DE MIGRAÇÃO DAS
CONFIGURAÇÕES
Copie o conteúdo para appsettings.json
Migrar conteúdo para o Azure Key Vault
 Refatore para usar o Configuration[“setting”]
Para uma transição suave use o pacote System.Configuration.ConfigurationManager
 Não há necessidade de refatoração das configs e você traz todo o web.config
 Não é compatível com Linux ou Mac
 Deve estar sendo executado no IIS
CONTEÚDO ESTÁTICO NO
WWWROOT
PORTABILIDADE DO ENTITY
FRAMEWORK
Entity Framework 6.x é incompatível com o .NET Core
 Solução: Rodar aplicações ASP.NET Core no .NET Framework
 Restrição: roda apenas no Windows e IIS
Scaffold EF Core data-context from existing database
dotnet ef dbcontext scaffold “ConnectionString“
Microsoft.EntityFrameworkCore.SqlServer -o Model
SUPORTE DI PARA O DBCONTEXT
Configure seu DbContext no ConfigureServices
Adicione o novo construtor DbContextOptions
Aceite o contexto como parâmetro de entrada em Controllers, Views, etc
Mude o System.Web.HttpContext para o
novo Microsoft.AspNetCore.Http.HttpContext
http://bit.ly/migratehttphandlers
AUTENTICAÇÃO E AUTORIZAÇÃO
Comece usando o ASP.NET Core Identity
 Não use sua própria solução de segurança
 Use o scaffold do Identity 2.1 e personalize para corresponder aos seus objetos
anteriores.
GERENCIANDO JAVASCRIPT/CSS COM
ASP.NET CORE
Adicione package.json/libman.json como referências aos seus pacotes
 libman.json não depende do NodeJS
 libman.json localiza arquivos conforme as instruções, o package.json requer outra etapa para implementar
os recursos
Use a extensão BunderMinifier ao invés do System.Web.Optimization
 Procure o “MadsKristensen.BundlerMinifier” no Visual Studio Marketplace
 Instale o pacote NuGet para o bundle on build – isso permitirá que compilações de
linha de comando sejam agrupadas
 Preserve o bundleconfig.json
MIGRANDO VIEWS
Razor é compatível com versões anteriores
Copie a pasta Views para dentro do novo projeto
Converta Views/web.config para Views/_ViewImports.cshtml
 Converta namespaces.add para @using
 Migre todas as configurações para a configurações centrais da aplicação
Scripts.Render e Styles.Render não existem
 Troque as referencias de saída para o libman ou BundlerMinifier
RECURSOS PARA IR ALÉM
Documentação official de migração
https://aka.ms/aspnetmigrate21
Visual Studio Channel
 https://twitch.tv/visualstudio
 https://mixer.com/visualstudio
ASP.NET Blog
 https://blogs.msdn.microsoft.com/webdev
#VSSUMMIT
MUITOOBRIGADO!

Mais conteúdo relacionado

Mais procurados

Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Rodrigo Kono
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...Bruno Luiz Pereira da Silva
 
ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)Giovanni Bassi
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Renato Groff
 
Testes Distribuídos com TestComplete v7
Testes Distribuídos com TestComplete v7Testes Distribuídos com TestComplete v7
Testes Distribuídos com TestComplete v7Miquéias Morezet
 
WSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao TomcatWSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao TomcatEdgar Silva
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRElvis Rocha
 
Introdução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESBIntrodução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESBEdgar Silva
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasBruno Luiz Pereira da Silva
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...Rodrigo Cândido da Silva
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAmazon Web Services LATAM
 
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpstdc-globalcode
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersElias Nogueira
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testesElias Nogueira
 
AWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com BeanstalkAWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com BeanstalkAmazon Web Services LATAM
 

Mais procurados (20)

Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
Infrastructure Testing
Infrastructure TestingInfrastructure Testing
Infrastructure Testing
 
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
 
ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)
 
Mobile tests usando AWS Device Farm
Mobile tests usando AWS Device FarmMobile tests usando AWS Device Farm
Mobile tests usando AWS Device Farm
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
 
Testes Distribuídos com TestComplete v7
Testes Distribuídos com TestComplete v7Testes Distribuídos com TestComplete v7
Testes Distribuídos com TestComplete v7
 
WSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao TomcatWSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao Tomcat
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
 
Introdução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESBIntrodução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESB
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWS
 
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containers
 
ASP .NET MVC na Prática
ASP .NET MVC na PráticaASP .NET MVC na Prática
ASP .NET MVC na Prática
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testes
 
AWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com BeanstalkAWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
 

Semelhante a Guia rápido para migrar aplicações ASP.NET para ASP.NET Core

Introdução ASP.NET Core
Introdução ASP.NET CoreIntrodução ASP.NET Core
Introdução ASP.NET Corelacerda2
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Ramon Durães
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVCBenicio Ávila
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.jsDenis Velrino
 
Melhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasMelhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasAmazon Web Services LATAM
 
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016Renato Groff
 
T@rget trust asp.net avançado
T@rget trust   asp.net avançadoT@rget trust   asp.net avançado
T@rget trust asp.net avançadoTargettrust
 
ASP.NET MVC 4 - Introdução - Parte I
ASP.NET MVC 4 - Introdução - Parte IASP.NET MVC 4 - Introdução - Parte I
ASP.NET MVC 4 - Introdução - Parte ICarlos Atila Abreu
 
AWS Webinar Series Brasil: Modernize seus Workloads Windows na AWS
AWS Webinar Series Brasil: Modernize seus Workloads Windows na AWSAWS Webinar Series Brasil: Modernize seus Workloads Windows na AWS
AWS Webinar Series Brasil: Modernize seus Workloads Windows na AWSAmazon Web Services LATAM
 
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Rodrigo Kono
 
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEMMinicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEMAlisson Solitto
 
Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast Eduardo Pires
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixNatanael Fonseca
 

Semelhante a Guia rápido para migrar aplicações ASP.NET para ASP.NET Core (20)

Introdução ASP.NET Core
Introdução ASP.NET CoreIntrodução ASP.NET Core
Introdução ASP.NET Core
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVC
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
 
Asp.net
Asp.netAsp.net
Asp.net
 
Melhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasMelhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernas
 
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
 
T@rget trust asp.net avançado
T@rget trust   asp.net avançadoT@rget trust   asp.net avançado
T@rget trust asp.net avançado
 
Acessando banco de dados remoto com android
Acessando banco de dados remoto com android Acessando banco de dados remoto com android
Acessando banco de dados remoto com android
 
O Futuro do ASP.NET (vNext)
O Futuro do ASP.NET (vNext)O Futuro do ASP.NET (vNext)
O Futuro do ASP.NET (vNext)
 
ASP.NET MVC 4 - Introdução - Parte I
ASP.NET MVC 4 - Introdução - Parte IASP.NET MVC 4 - Introdução - Parte I
ASP.NET MVC 4 - Introdução - Parte I
 
Web services
Web servicesWeb services
Web services
 
AWS Webinar Series Brasil: Modernize seus Workloads Windows na AWS
AWS Webinar Series Brasil: Modernize seus Workloads Windows na AWSAWS Webinar Series Brasil: Modernize seus Workloads Windows na AWS
AWS Webinar Series Brasil: Modernize seus Workloads Windows na AWS
 
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
 
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEMMinicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
 
Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 

Mais de Rodrigo Kono

Develop using Office Graph API
Develop using Office Graph APIDevelop using Office Graph API
Develop using Office Graph APIRodrigo Kono
 
.NET no Browser - Webassembly com Blazor!
.NET no Browser - Webassembly com Blazor!.NET no Browser - Webassembly com Blazor!
.NET no Browser - Webassembly com Blazor!Rodrigo Kono
 
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
.NET para construir qualquer coisa! (Visão Geral) #dotnetconfRodrigo Kono
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSRodrigo Kono
 
Ciclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaCiclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaRodrigo Kono
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreRodrigo Kono
 
Controle do ciclo de vida do desenvolvimento de software com tfs vsts
Controle do ciclo de vida do desenvolvimento de software com tfs  vstsControle do ciclo de vida do desenvolvimento de software com tfs  vsts
Controle do ciclo de vida do desenvolvimento de software com tfs vstsRodrigo Kono
 
Desenvolvimento add in Office 2016
Desenvolvimento add in Office 2016Desenvolvimento add in Office 2016
Desenvolvimento add in Office 2016Rodrigo Kono
 
Além do código dicas de evolução profissional
Além do código   dicas de evolução profissionalAlém do código   dicas de evolução profissional
Além do código dicas de evolução profissionalRodrigo Kono
 
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALMAprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALMRodrigo Kono
 
O que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET COREO que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET CORERodrigo Kono
 
Deployment no Azure
Deployment no AzureDeployment no Azure
Deployment no AzureRodrigo Kono
 
Servidor de Build e Integração Contínua
Servidor de Build e Integração ContínuaServidor de Build e Integração Contínua
Servidor de Build e Integração ContínuaRodrigo Kono
 
Dia 01 - Workshop ASP.NET CORE 1.1
Dia 01 - Workshop ASP.NET CORE 1.1Dia 01 - Workshop ASP.NET CORE 1.1
Dia 01 - Workshop ASP.NET CORE 1.1Rodrigo Kono
 
Abertura - Workshop ASP.NET Core
Abertura - Workshop ASP.NET CoreAbertura - Workshop ASP.NET Core
Abertura - Workshop ASP.NET CoreRodrigo Kono
 
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open SourceDesenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open SourceRodrigo Kono
 
TypeScript: turbinando os poderes do desenvolvedor javascript
TypeScript: turbinando os poderes do desenvolvedor javascriptTypeScript: turbinando os poderes do desenvolvedor javascript
TypeScript: turbinando os poderes do desenvolvedor javascriptRodrigo Kono
 
TechLab de dotnet core no dotnetConf.local
TechLab de dotnet core no dotnetConf.localTechLab de dotnet core no dotnetConf.local
TechLab de dotnet core no dotnetConf.localRodrigo Kono
 
O maravilhoso mundo dos webhooks
O maravilhoso mundo dos webhooksO maravilhoso mundo dos webhooks
O maravilhoso mundo dos webhooksRodrigo Kono
 

Mais de Rodrigo Kono (20)

Develop using Office Graph API
Develop using Office Graph APIDevelop using Office Graph API
Develop using Office Graph API
 
.NET no Browser - Webassembly com Blazor!
.NET no Browser - Webassembly com Blazor!.NET no Browser - Webassembly com Blazor!
.NET no Browser - Webassembly com Blazor!
 
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTS
 
Ciclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaCiclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a ponta
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
Controle do ciclo de vida do desenvolvimento de software com tfs vsts
Controle do ciclo de vida do desenvolvimento de software com tfs  vstsControle do ciclo de vida do desenvolvimento de software com tfs  vsts
Controle do ciclo de vida do desenvolvimento de software com tfs vsts
 
Desenvolvimento add in Office 2016
Desenvolvimento add in Office 2016Desenvolvimento add in Office 2016
Desenvolvimento add in Office 2016
 
Além do código dicas de evolução profissional
Além do código   dicas de evolução profissionalAlém do código   dicas de evolução profissional
Além do código dicas de evolução profissional
 
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALMAprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
 
O que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET COREO que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET CORE
 
Deployment no Azure
Deployment no AzureDeployment no Azure
Deployment no Azure
 
Servidor de Build e Integração Contínua
Servidor de Build e Integração ContínuaServidor de Build e Integração Contínua
Servidor de Build e Integração Contínua
 
Dia 01 - Workshop ASP.NET CORE 1.1
Dia 01 - Workshop ASP.NET CORE 1.1Dia 01 - Workshop ASP.NET CORE 1.1
Dia 01 - Workshop ASP.NET CORE 1.1
 
Abertura - Workshop ASP.NET Core
Abertura - Workshop ASP.NET CoreAbertura - Workshop ASP.NET Core
Abertura - Workshop ASP.NET Core
 
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open SourceDesenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
 
TypeScript: turbinando os poderes do desenvolvedor javascript
TypeScript: turbinando os poderes do desenvolvedor javascriptTypeScript: turbinando os poderes do desenvolvedor javascript
TypeScript: turbinando os poderes do desenvolvedor javascript
 
TechLab de dotnet core no dotnetConf.local
TechLab de dotnet core no dotnetConf.localTechLab de dotnet core no dotnetConf.local
TechLab de dotnet core no dotnetConf.local
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
O maravilhoso mundo dos webhooks
O maravilhoso mundo dos webhooksO maravilhoso mundo dos webhooks
O maravilhoso mundo dos webhooks
 

Guia rápido para migrar aplicações ASP.NET para ASP.NET Core

  • 1. Dicas para migrar sua aplicação ASP.NET para ASP.NET Core #VSSUMMIT
  • 2.
  • 3. DEVO MIGRAR PARA ASP.NET CORE SE… Desempenho é algo obrigatório (Kestrel delivers 7M req/sec) Suporte multiplataforma é necessário Ambiente Enterprise (muitas aplicações em mesmo server, diferentes frameworks, etc) Se o update de 6 meses para Open Source é algo aceitável Sua aplicação já é ASP.NET MVC, WebAPI, ou SignalR
  • 4. NÃO MIGRAR PARA ASP.NET CORE SE… Você acha legal, novo ou só porque seus amigos estão usando Sua aplicação precisa trabalhar com containers Você precisa de Injeção de Dependência em todos os lugares Você gosta de web.config A sua aplicação funciona bem e entrega o que precisa para o seu negócio
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. Visão da plataforma .NET atualmente LIBRARIES INFRASTRUCTURE .NET STANDARD DESKTOP WEB CLOUD MOBILE GAMING IoT AI
  • 11.
  • 14.
  • 15. ARQUIVO CSPROJ NO ASP.NET 4.6.1
  • 16. ARQUIVO CSPROJ NO ASP.NET CORE 2.1
  • 17.
  • 18.
  • 19. PREOCUPAÇÕES COM O STARTUP.CS  Certifique-se de que o middleware para solicitações MVC/WebAPI esteja configurado corretamente  Revise e adicione configuração para: o CORS – Cross-Origin Resource Sharing o Global Exception Handling o MVC Routing o MVC / WebAPI Filters o WebAPI Formatters o Model Binders o Areas o Authentication
  • 21. MANIPULAÇÃO DE EXCEPTIONS if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); }
  • 22. FILTERS public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader", "Resultado do filter adicionado para o GlobalHeader")); // uma instância options.Filters.Add(typeof(SampleActionFilter)); // por type options.Filters.Add(new SampleGlobalActionFilter()); // uma instância }); services.AddScoped<AddHeaderFilterWithDi>(); }
  • 23. FORMATTERS public class VcardOutputFormatter : TextOutputFormatter public class VcardInputFormatter : TextInputFormatter services.AddMvc(options => { options.InputFormatters.Insert(0, new VcardInputFormatter()); options.OutputFormatters.Insert(0, new VcardOutputFormatter()); });
  • 24.
  • 25. CRIE UM MIDDLEWARE  Software montado em um pipeline  Lida com solicitações e respostas, BeginRequest e EndRequest  Sua classe Middleware deve manipular um Delegate
  • 26. MANIPULE O MIDDLEWARE O manipulador processa a solicitação e entrega RequestDelegate Request
  • 27. USANDO O NOVO MIDDLEWARE app.UseMiddleware<MyMiddleware>(); app.MapWhen( context => context.Request.Path.ToString().EndsWith(".report"), appBranch => { appBranch.UseMiddleware<MyHandlerMiddleware Handler>(); });
  • 28.
  • 29. INJEÇÃO DE DEPENDÊNCIA INTEGRADA  Padrão DI nativo  Controle simples e eficiente em três escopos:  Transient: todos diferentes. Nova instância para todos controladores e serviços  Scoped: mesma instância para a mesma request, porém diferente em requests diferentes  Singleton: mesma instância. Para todos os objetos e requests  Startup.ConfigureServices ()
  • 30.
  • 31. COMPATIBILIDADE DA WEBAPI  Incluir o Microsoft.AspNetCore.Mvc.WebApiCompatShim para facilitar a compatibilidade com o Web API 2.  O máximo que puder, sempre migre pra usar o [ApiController]  Se você estiver usando HttpResponseMessage em seus Web Api Controllers, você precisará fazer uma pequena alteração de código na sua classe de inicialização para chamar AddWebApiConventions(). services.AddMvc().AddWebApiConventions()  Dependendo de como você deseja fazer o roteamento com o Web API, talvez seja necessário registrar as rotas para ele na sua classe de inicialização. routes.MapWebApiRoute(name: "DefaultApi", template: "api/{controller}/{id?}");
  • 32.
  • 33. ESTRATÉGIAS DE MIGRAÇÃO DAS CONFIGURAÇÕES Copie o conteúdo para appsettings.json Migrar conteúdo para o Azure Key Vault  Refatore para usar o Configuration[“setting”] Para uma transição suave use o pacote System.Configuration.ConfigurationManager  Não há necessidade de refatoração das configs e você traz todo o web.config  Não é compatível com Linux ou Mac  Deve estar sendo executado no IIS
  • 34.
  • 36.
  • 37. PORTABILIDADE DO ENTITY FRAMEWORK Entity Framework 6.x é incompatível com o .NET Core  Solução: Rodar aplicações ASP.NET Core no .NET Framework  Restrição: roda apenas no Windows e IIS Scaffold EF Core data-context from existing database dotnet ef dbcontext scaffold “ConnectionString“ Microsoft.EntityFrameworkCore.SqlServer -o Model
  • 38. SUPORTE DI PARA O DBCONTEXT Configure seu DbContext no ConfigureServices Adicione o novo construtor DbContextOptions Aceite o contexto como parâmetro de entrada em Controllers, Views, etc
  • 39.
  • 40. Mude o System.Web.HttpContext para o novo Microsoft.AspNetCore.Http.HttpContext http://bit.ly/migratehttphandlers
  • 41.
  • 42. AUTENTICAÇÃO E AUTORIZAÇÃO Comece usando o ASP.NET Core Identity  Não use sua própria solução de segurança  Use o scaffold do Identity 2.1 e personalize para corresponder aos seus objetos anteriores.
  • 43.
  • 44. GERENCIANDO JAVASCRIPT/CSS COM ASP.NET CORE Adicione package.json/libman.json como referências aos seus pacotes  libman.json não depende do NodeJS  libman.json localiza arquivos conforme as instruções, o package.json requer outra etapa para implementar os recursos Use a extensão BunderMinifier ao invés do System.Web.Optimization  Procure o “MadsKristensen.BundlerMinifier” no Visual Studio Marketplace  Instale o pacote NuGet para o bundle on build – isso permitirá que compilações de linha de comando sejam agrupadas  Preserve o bundleconfig.json
  • 45.
  • 46. MIGRANDO VIEWS Razor é compatível com versões anteriores Copie a pasta Views para dentro do novo projeto Converta Views/web.config para Views/_ViewImports.cshtml  Converta namespaces.add para @using  Migre todas as configurações para a configurações centrais da aplicação Scripts.Render e Styles.Render não existem  Troque as referencias de saída para o libman ou BundlerMinifier
  • 47. RECURSOS PARA IR ALÉM Documentação official de migração https://aka.ms/aspnetmigrate21 Visual Studio Channel  https://twitch.tv/visualstudio  https://mixer.com/visualstudio ASP.NET Blog  https://blogs.msdn.microsoft.com/webdev

Notas do Editor

  1. .NET is an entire software development platform that takes care of a lot of the heavy lifting for you when you want to build an application. Applications frameworks help you build the specific types of apps or workloads and enable you to literally build any app for any platform with any operating system. Each .NET workload shares a common infrastructure and .NET Standard library. This means not only are your .NET skills portable, but your actual code is portable no matter what you’re building. This makes it easy to share reusable components (called libraries) across the breadth of applications people build. Additionally, there are a broad set of development tools that makes it really productive to write, debug, build and manage code bases. See: www.dot.net
  2. dotnet migrate Migrador do VS
  3. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-2.2 UseDeveloperExceptionPage: https://docs.microsoft.com/pt-br/dotnet/api/microsoft.aspnetcore.builder.developerexceptionpageextensions.usedeveloperexceptionpage?view=aspnetcore-2.2 UseExceptionHandler: https://docs.microsoft.com/pt-br/dotnet/api/microsoft.aspnetcore.builder.exceptionhandlerextensions.useexceptionhandler?view=aspnetcore-2.2
  4. https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.2
  5. https://codeopinion.com/wp-content/uploads/2018/01/out1-300x280.png https://codeopinion.com/wp-content/uploads/2018/01/out2-300x300.png
  6. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.2
  7. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.2
  8. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2 Transient: todos diferentes. Nova instância para todos controladores e serviços Scoped: mesma instância para a mesma request, porém diferente em requests diferentes Singleton: mesma instância. Para todos os objetos e requests
  9. https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules?view=aspnetcore-2.2#migrating-to-the-new-httpcontext This section shows how to translate the most commonly used properties of System.Web.HttpContext to the new Microsoft.AspNetCore.Http.HttpContext.
  10. https://github.com/madskristensen/BundlerMinifier https://github.com/aspnet/LibraryManager/wiki/Using-LibMan-in-Visual-Studio https://www.ttmind.com/techpost/How-to-use-LibMan-ASP-NET-Core-With-Visual-Studio