ASP.NET Core 2.0 Preview 1 中贴心的新特性

西雅图时间5月10日,微软在 Build 2017 大会上发布了 ASP.NET Core 2.0 Preview 1 ( 详见 Announcing ASP.NET 2.0.0-Preview1 and Updates for .NET Web Developers )。

以下是我关注的、并且经过自己实际验证的贴心的新特性:

1)Microsoft.AspNetCore.All —— 1包携10包,省力又省心

使用 ASP.NET Core 2.0 只需要安装一个 NuGet 组合包 —— Microsoft.AspNetCore.All,发布时会自动排除没有用到的包。

2)WebHost.CreateDefaultBuilder() —— 1行替10行,配置更简洁

ASP.NET Core 2.0 中的 Prgram.cs :

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

上面的 1 行 WebHost.CreateDefaultBuilder(args) 取代了 ASP.NET Core 1.x 中的 10+ 行代码(Program.cs + Startup.cs)。

ASP.NET Core 1.x 中的 Program.cs :

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

ASP.NET Core 1.x 中的 Startup.cs:

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; }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();            
    }
}

对应的 ASP.NET Core 2.0 中的 Startup.cs :

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}

3)LoggerFactory.AddFilter(IDictionary<string, LogLevel> filter) 

ASP.NET Core 2.0 中通过代码配置日志过滤(Program.cs):

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging(factory =>
            {
                factory.UseConfiguration(null);
                factory.AddFilter(
                    new Dictionary<string, LogLevel>
                    {
                        { "Micrsoft",  LogLevel.Debug }
                    });
                factory.AddConsole();
            })
            .UseStartup<Startup>()
            .Build();
}

或者

public static class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .ConfigureLogging(factory =>
            {
                factory.AddConsole();
                factory.AddFilter("Console", level => level >= LogLevel.Information);
            })
            //...
    }
}

ASP.NET Core 1.x 中(Startup.cs):

loggerFactory.WithFilter(new FilterLoggerSettings
{
    { "Microsoft", LogLevel.Debug }
});

4)appsettings.json 中日志配置的变化

ASP.NET Core 2.0 中的日志配置如下,可直接在配置文件中根据 logging provider 配置对应的日志级别:

{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

ASP.NET Core 1.x 中除了在配置文件中进行配置,还需要在代码中进行配置。

appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

Startup.cs

loggerFactory.AddConsole(Configuration.GetSection("Logging"));

5)Razor Pages

通过 Razor Pages ,只需 View,无需 Controller ,就可以直接访问 。

比如下面的Index.cshtml,直接就可以通过 http://localhost:5000/index 访问

posted @ 2017-05-12 14:11  dudu  阅读(3706)  评论(6编辑  收藏  举报