ASP .NET Core 2.0 - As novidades da nova versão

 Neste artigo estou transcrevendo um texto que apresenta as novidades da ASP .NET Core 2.0 que foi disponbilizada recentemente em Preview 1.

Ja está disponível a ASP.NET Core 2.0 Preview 1, e , você já pode começar a criar aplicativos com ASP.NET Core 2.0. Hoje (maio/2017),  ela ainda esta na versão Preview 1, e a versão final, deverá ser lançada no  terceiro trimestre de 2017.(Q3-2017).

Para construir aplicações usando a ASP.NET Core 2.0, você precisa instalar o Visual Studio 2017 Preview 3. Esteja preparado para algumas mudanças de código e algumas novas peças. Neste artigo vou compilar um resumo das principais novidades da ASP.NET Core 2.0 em comparação com o ASP.NET Core 1.1.

ASP .NET Core 2.0 Preview 1
  1. A ASP.NET Core 2.0 implementa o .NET Standard 2.0, e isso permite que você use recursos do .NET Framework que faltavam com ASP.NET Core como: Datasets, Serialização BInária, Reflection e muitas outros recursos.

  2. Aplicações ASP.NET Core podem também serem criadas via dotnet cli. O comando a seguir cria uma nova aplicação web ASP.NET Core :  dotnet new web
    Após esse comando, antes você precisava executar outro comando para restaurar todos os pacotes: dotnet restore
    Agora você não precisa executar esse comando extra. Restaurar pacotes agora faz parte do novo comando dotnet new.
     
  3. Aplicações ASP.NET Core 2.0 agora referenciam um único pacote Microsoft.AspNetCore.All para incluir todos os pacotes ASP.NET Core com a versão do produto. Isso faz com que o arquivo .csproj seja pequeno e limpo. É uma maneira mais fácil de incluir todas as referências dos pacotes da ASP.NET Core sem se preocupar com suas diferentes versões. Você não precisa mais escolher pacotes ASP.NET Core individuais.  Abaixo temos um exemplo de um arquivo .csproj referenciando este pacote:
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
   <TargetFramework>netcoreapp2.0</TargetFramework>
   <UserSecretsId>aspnet-ASPNETStandard2App-78010062-13D5-415D-B52E-86D936DA3176</UserSecretsId>
</PropertyGroup>

<ItemGroup>
    <Folder Include="wwwroot\" />
</ItemGroup>

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
</ItemGroup>

</Project>

Nota: Quando a ASP.NET Core foi introduzida, houve muito destaque sobre o fato dela ser modular e trazer apenas o que era necessário. Muitos desenvolvedores gostaram disso, pois reduz o tamanho da aplicação. Então com isso voltamos ao que era antes ?
A equipe do projeto ASP .NET Core diz que não, pois você vai poder continuar seguindo a maneira tradicional de incluir os pacotes necessários. Então, por que esse grande pacote foi introduzido ? Bem, eles dizem que manter, atualizar e remover pacotes indesejados requer um esforço extra e que você tem que lembrar o nome do pacote.

Realmente isso é uma atitude que incomoda pois agora você vai ter aquele pacotão com tudo que você precisa e também não precisa na sua aplicação pois o .NET Core SDK já possui todos os pacotes incluídos dentro do Microsoft.AspNetCore.All. A vantagem é que esta tudo lá e você não vai precisar mais baixar os pacotes. (será que isso é mesmo uma vantagem ??? )

E sobre a implantação? Bem, se houver recursos que você não precisa em sua aplicação, eles dizem que os novos recursos de corte de pacotes excluirão os binários em sua saída de aplicativo publicada por padrão.

  1. A ASP.NET Core 2.0 apresenta uma nova maneira de criar a configuração do host da web. Esta nova abordagem define os padrões da configuração do host da Web usando a a API WebHost.CreateDefaultBuilder(). Abaixo temos uma comparação entre ASP.NET Core 1.1 e a nova versão:
     
    ASP .NET Core 1.1 ASP .NET Core 2.1 Preview 1
    public class Program
        {
            public static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseIISIntegration()
                    .UseStartup<Startup>()
                    .Build();
                host.Run();
            }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }
        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }

     

    BuildWebHost é uma expression bodied function (expressão de função de corpo ) introduzida no C# 6. Este método chama um método estático CreateDefaultBuilder que adiciona o Kestrel, a configuração do IIS, as fontes de configuração padrão, os provedores de registro e a raiz de conteúdo. Assim, em vez de ter fazer tudo isso, o CreateDefaultBuilder o faz o trabalho por você.
     

  2. A configuração de logging e building não faz mais parte do arquivo Startup.cs. Agora é parte do CreateDefaultBuilder, chamado em Program.cs. Veja a comparação:
     
    ASP .NET Core 1.1 ASP .NET Core 2.1 Preview 1
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }
        public IConfigurationRoot Configuration { get; }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            app.UseMvc();
        }
    }
      public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
            public IConfiguration Configuration { get; }
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc();
            }
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                app.UseMvc();
            }
        }
    }

    Como você pode ver, o construtor já não possui mais o IHostingEnvironment, em vez disso, toma a dependência IConfiguration injetada e define a propriedade Configuration para acesso posterior, se necessário. Outra alteração está no método Configure, pois o registro não faz mais parte desse método.
     

  3. O ASP.NET Core 2.0 apresenta as páginas Razor. As Razor Pages são páginas simples ou views sem controladores associados a ela. Elas são incluídas no pacote Microsoft.AspNetCore.Mvc, e trabalham por convenção, e assim , precisam ser colocadas na pasta Pages e usar a extensão .cshtml. A seguir, uma amostra da página de código de uma Razor Page:
     
    @page
    @{
        var mensagem = "Ola, Mundo!";
    }
    <html>
    <body>
        <p>@mensagem</p>
    </body>
    </html>

    Elas devem usar a diretiva @page como a primeira diretriz. Você pode escrever uma página Razor : com modelo inline (usando a diretiva @functions), com modelos de página separados (denominados Pages Models) e sem modelos. O roteamento também funciona bem nestas páginas. Visite o site da documentação oficial para mais detalhes.
     

  4. A API Platform Abstraction responsável pela informação do ambiente do aplicativo foi removida. Por favor, visite este link para saber mais sobre essa substituição.
     
  5. A autenticação sofreu algumas mudanças importantes. Todos os middleware Auth agora são serviços e agora é necessário apenas um único middleware de autenticação que é app.UseAuthentication(). Abaixo temos uma comparação de código usada para habilitar a autenticação de cookies :
     
    ASP .NET Core 1.1 ASP .NET Core 2.1 Preview 1
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions()
         {
             AuthenticationScheme = "MyCookieMiddlewareInstance",
             LoginPath = new PathString("/Account/Unauthorized/"),
             AccessDeniedPath = new PathString("/Account/Forbidden/"),
             AutomaticAuthenticate = true,
             AutomaticChallenge = true
         });
         app.UseMvc();
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCookieAuthentication(o => o.LoginPath = "/api/login");
    }
    public void Configure(IApplicationBuilder app)
    {
        app.UseAuthentication();
        app.UseMvc();
    }

     

    Como você pode ver, o método Configure() agora apenas adiciona o middleware de autenticação ao pipeline sem especificar nenhuma opção configurável para o mecanismo de autenticação. A tabela a seguir mostra as mudanças de nome de alguns dos middleware de autenticação.

    ASP.NET Core 1.1 ASP.NET Core 2.0
    app.UseOpenIdConnectAuthentication services.AddOpenIdConnectAuthentication
    app.UseJwtBearerAuthentication services.AddJwtBearerAuthentication
    app.UseFacebookAuthentication services.AddFacebookAuthentication

    Para mais detalhes veja este link : https://github.com/aspnet/Announcements/issues/232
     

Bem, essas foram as mudanças mais importantes, para mais detalhes sobre outras alterações visite este endereço : https://github.com/aspnet/Announcements/milestone/12

Resta aguarda e ver o que vai vingar e o que vai azedar...

fonte : http://www.talkingdotnet.com/whats-new-in-asp-net-core-2-0/

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti