ASP.NET Core 1.1 于2016年11月16日发布。这个版本包括许多伟大的新功能以及许多错误修复和一般的增强。这个版本包含了多个新的中间件组件、针对Windows的WebListener服务器、Razor视图编译以及Azure相关的特性。要将现有项目更新到ASP.NET Core 1.1 ,您需要执行以下操作:

1. 下载并安装更新的.NET Core 1.1  SDK
2. 按照.NET Core 1.1 升级公告(下一节介绍)中的说明将项目更新为使用.NET Core 1.1
3. 更新您的ASP.NET Core包依赖项以使用新的1.1.0 版本

注意:要在Visual Studio中使用NuGet包管理器将包更新到1.1 ,您需要从nuget.org下载并安装用于nuget  3.5 。你现在应该准备试试1.1!

新的中间件组件和增强

在这个版本中,我们能够在特定的控制器或action中使用中间件组件。组件可以借助新的MiddlewareFilterAttribute担当MVC资源过滤器的角色。例如,响应压缩和缓存这样的功能可以配置在特定的action或控制器中,而不是配置在整个应用的级别上。

在之前的几个版本中,URL重写(URL rewriting)就已经成为IIS的一项特性了,它是作为一个http模块来实现的。在这个预览版本中,URL重写作为一个中间件组件重新回归了。这个组件可以配置为使用IIS标准的XML格式化规则、Apache Mod_Rewrite语法,也可以直接使用Web应用中的C#方法。

ASP.NET Core 1.1还带来了两个新的中间件,也就是响应缓存(response caching)响应压缩(response compression)。响应缓存中间件会作为ASP.NET MVC中OutputCacheAttribute的继任者。

URL重写中间件

通过可以使用IIS标准XML格式化规则,Apache Mod_Rewrite语法或一些编码到您的应用程序中的一些简单的C#方法配置的中间件组件将URL重写功能带到ASP.NET Core。这允许将设计用于客户端消耗的公共URL空间映射到中间件流水线所需的下游组件的任何表示,以及根据模式将客户端重定向到不同的URL。

例如,您可以通过重写对http://example.com的任何请求来确保规范主机名,而在重写规则运行后为所有内容重写http://www.example.com。另一个示例是将所有请求重定向到http://example.com到https://example.com。您甚至可以配置URL重写,以便应用这两个规则,并且对example.com的所有请求始终重定向到SSL并重写为www。

我们可以通过添加对Microsoft.AspNetCore.Rewrite包的Web应用程序的引用来开始使用此中间件。这允许我们在我们的重写器的Startup.Configure方法中添加一个调用来配置RewriteOptions:

  1. using System.IO;
  2. using Microsoft.AspNetCore.Builder;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.AspNetCore.Rewrite;
  6.  
  7. namespace MyApplication {
  8.  
  9. public class Startup {
  10.  
  11. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  12. {
  13.  
  14. var options = new RewriteOptions()
  15. .AddRedirect("(.*)/$", "$1") // 使用正则表达式重定向
  1. .AddRewrite(@"app/(\d+)", "app?id=$1", skipRemainingRules: false) // 基于正则表达式重写
  2. .AddRedirectToHttps(302, 5001) // 重定向到其他端口并使用HTTPS
  1. .AddIISUrlRewrite(env.ContentRootFileProvider, "UrlRewrite.xml") // 使用IIS UrlRewriter规则进行配置
  1. .AddApacheModRewrite(env.ContentRootFileProvider, "Rewrite.txt"); // 使用Apache mod_rewrite规则进行配置
  2. app.UseRewriter(options);
  3. }
  4.  
  5. // Other Code
  6.  
  7. }
  8.  
  9. }
  1. 正如你所看到的,我们可以用不同的规则强制重写和重定向。
  • Url Redirect将HTTP 301 Moved Permanently状态代码发送到具有新地址的客户端
  • Url Rewrite为HTTP管道中的后续步骤提供了一个不同的URL,欺骗它认为请求了不同的地址。

响应缓存中间件

通过将Microsoft.AspNetCore.ResponseCaching和Microsoft.Extensions.Caching.Memory包添加到应用程序中,现在可以在应用程序中激活与之前的ASP.NET版本的OutputCache功能类似的响应缓存。 您可以在Startup.ConfigureServices方法中将此中间件添加到应用程序,并从Startup.Configure方法配置响应缓存。 对于示例实现,请查看ResponseCaching存储库中的演示。

响应压缩中间件

现在,您可以将GZipCompression添加到ASP.NET HTTP管道,如果您希望ASP.NET执行压缩,而不是前端Web服务器。 此中间件在Microsoft.AspNetCore.ResponseCompression包中提供。 您可以在Startup.cs类中使用具有以下语法的最快压缩级别添加简单的GZipCompression:

  1. public class Startup {
  2.  
  3. public void ConfigureServices(IServiceCollection services)
  4. {
  5.  
  6. services.AddResponseCompression();
  7.  
  8. }
  9.  
  10. public void Configure(IApplicationBuilder app)
  11. {
  12.  
  13. app.UseResponseCompression();
  14.  
  15. // Other code
  16.  
  17. }
  18. }

还有其他可用于配置压缩的选项,包括指定自定义压缩提供程序的功能。

Razor视图编译

在ASP.NET MVC之前的版本中,有一种预编译Web站点的方式,这样的话,视图编译就可以在部署阶段执行,而不是在运行期。通过这种方式,能够减少部署后首次加载页面所造成的延迟。ASP.NET Core 1.1重新带回了预编译Razor视图的功能。这个视图编译器要添加到应用的project.json文件的“tools”部分,并且要带有对工具包的引用。在运行package restore之后,dotnet razor-precompile命令就可以预编译razor视图了。

将视图组件用作标签助手

现在,您可以使用Tag Helper语法从视图中调用View组件,并在Visual Studio中获得IntelliSense和Tag Helper工具的所有优点。 以前,要从视图调用View组件,您将使用Component.InvokeAsync方法,并使用匿名对象传递任何View组件参数:

  1. @await Component.InvokeAsync("Copyright", new { website = "example.com", year = 2016 })
  1. 相反,您现在可以像获取任何标记助手一样调用View组件,同时获取View Component参数的Intellisense
  1.  
  1. 要启用将View组件调用为标签助手,只需使用@addTagHelpers指令将View组件添加为标签助手:
  1. @addTagHelper "*, WebApplication1"

中间件作为MVC过滤器

中间件通常位于全局请求处理管道中。 但是如果你想将中间件只应用于特定的控制器或操作呢? 您现在可以使用新的MiddlewareFilterAttribute将中间件应用为MVC资源过滤器。 例如,您可以将响应压缩或缓存应用于特定操作,也可以使用基于路由值的请求文化提供程序,使用本地化中间件为请求建立当前文化。

要使用中间件作为过滤器,您首先使用Configure方法创建一个类型,该方法指定要使用的中间件管道:

  1. public class LocalizationPipeline {
  2.  
  3. public void Configure(IApplicationBuilder applicationBuilder)
  4. {
  5.  
  6. var supportedCultures = new[]
  7. {
  8. new CultureInfo("en-US"),
  9. new CultureInfo("fr")
  10. };
  11.  
  12. var options = new RequestLocalizationOptions {
  13.  
  14. DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US"),
  15. SupportedCultures = supportedCultures,
  16. SupportedUICultures = supportedCultures
  17. };
  18. options.RequestCultureProviders = new[] { new RouteDataRequestCultureProvider() { Options = options } };
  19.  
  20. applicationBuilder.UseRequestLocalization(options);
  21.  
  22. }
  23. }

然后,您可以使用MiddlewareFilterAttribute将该中间件流水线应用于控制器操作或全局:

  1. [Route("{culture}/[controller]/[action]")]
  2. [MiddlewareFilter(typeof(LocalizationPipeline))]
  3. public IActionResult CultureFromRouteData()
  4. {
  5.  
  6. return Content($"CurrentCulture:{CultureInfo.CurrentCulture.Name},CurrentUICulture:{CultureInfo.CurrentUICulture.Name}");
  7.  
  8. }

虽然视图的razor语法提供了不需要编译器的灵活开发体验,但在某些情况下,您不希望在运行时解释razor语法。 您现在可以预先编译应用程序引用的Razor视图,并使用应用程序部署它们。 您可以在project.json的“tools”部分中使用包引用“Microsoft.AspNetCore.Mvc.Razor.Precompilation.Tools”将视图编译器添加到应用程序。 运行程序包恢复后,您可以执行“dotnet razor-precompile”来预编译应用程序中的剃刀视图。

针对Windows的WebListener服务器

WebListener是构建在Windows Http Server API之上的服务器。WebListener提供了依赖于平台的特性,比如Windows authentication、端口共享(port sharing)、结合SNI的HTTPS、基于TLS的HTTP/2(Windows 10)、直接的文件传输以及WebSockets的响应缓存(Windows 8)。

用于Windows的WebListener服务器

WebListener是直接在Windows Http Server API之上运行的服务器。 WebListener提供了利用Windows特定功能的选项,如支持Windows身份验证,端口共享,带有SNI的HTTPS,TLS的HTTP / 2(Windows 10),直接文件传输和响应缓存WebSockets(Windows 8)。 在Windows上,您可以使用此服务器而不是Kestrel,通过引用Microsoft.AspNetCore.Server.WebListener包而不是Kestrel包,并将WebHostBuilder配置为使用Weblistener而不是Kestrel:

  1. public static void Main(string[] args)
  2. {
  3. var host = new WebHostBuilder()
  4. .UseStartup<Startup>()
  5. .UseWebListener(options =>
  6. {
  7. options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.None;
  8. options.ListenerSettings.Authentication.AllowAnonymous = true;
  9. })
  10. .Build();
  11.  
  12. host.Run();
  13. }

您可以在其GitHub存储库中找到演示使用WebListener的其他示例。

与作为此版本的一部分的其他软件包不同,WebListener正以1.0.0和1.1.0的形式提供。 1.0.0版本的包可用于生产LTS(1.0.1)ASP.NET Core应用程序。

Azure相关的特性

AzureAppServicesIntegration包允许发送日志到Azure App Service中。要写入的所有日志信息都会使用ILogger/ILoggerFactory抽象,在Azure门户的App Service配置中,Diagnostics Logs区域设置了这些日志将会写入到什么位置中。

AzureKeyVault包带来了一个针对Azure Key Vault的配置提供者(configuration provider )。这样的话,就允许我们在应用启动的时候从Key Vault secrets中获取配置,并将其放在内存之中,从而能够使用正常的ASP.NET Core配置抽象来访问配置数据。

ASP.NET Core引入了DataProtection,它提供了加密相关的API。这个预览版本包含了两个包,允许将数据保护的key(Data Protection key)存储到Azure StorageRedis中。这样的话,能够跨多个Web站点实例来共享key,也能够在负载均衡的场景下跨多台服务器进行共享。

Azure App Service日志记录提供程序

Microsoft.AspNetCore.AzureAppServicesIntegration包允许您的应用程序利用App Service特定的日志记录和诊断。 使用ILogger / ILoggerFactory抽象编写的任何日志消息将转到门户中App Service配置的“诊断日志”部分中配置的位置(请参阅屏幕截图)。

用法:

添加对Microsoft.AspNetCore.AzureAppServicesIntegration包的引用,并调用Program.cs中的UseAzureAppServices方法。

  1. public static void Main(string[] args)
  2. {
  3.  
  4. var host = new WebHostBuilder()
  5. .UseKestrel()
  6. .UseAzureAppServices()
  7. .UseStartup<Startup>()
  8. .Build();
  9.  
  10. host.Run();
  11.  
  12. }

注意:UseIISIntegration不在上述示例中,因为UseAzureAppServices包括它,如果您有两个调用,但不显式调用UseIISIntegration不应该不会伤害您的应用程序。

添加UseAzureAppServices方法后,您的应用程序将遵守Azure应用程序服务设置的诊断日志部分中的设置,如下所示。 如果更改这些设置,例如,从文件系统切换到blob存储日志,您的应用程序将自动切换到记录到新位置,而不重新部署。

Azure密钥库配置提供程序

Microsoft.Extensions.Configuration.AzureKeyVault包为Azure密钥库提供配置提供程序。 这允许您从应用程序启动时从密钥保险库秘密检索配置并将其保存在内存中,使用普通的ASP.NET Core配置抽象来访问配置数据。

提供者的基本用法是这样的:

  1. var builder = new ConfigurationBuilder();
  2. .AddJsonFile("settings.json")
  3. .AddKeyVault(
  4. "<vault uri>", //要从中检索密钥的密钥库的URI
  5. "<clientId>", //要用于检索密钥的客户端ID。
  6. cert //用于使用Azure AD进行身份验证的x509证书
  7. )

有关如何添加Key Vault配置提供程序的示例,请参阅此处的示例:

https://github.com/aspnet/Configuration/tree/dev/samples/KeyVaultSample

Redis和Azure存储数据保护密钥库

Microsoft.AspNetCore.DataProtection.AzureStorage和Microsoft.AspNetCore.DataProtection.Redis软件包允许将数据保护锁分别存储在Azure存储或Redis中。 这允许在网站的多个实例之间共享密钥,以便您可以例如在运行ASP.NET Core应用程序的多个负载平衡服务器上共享认证cookie或CSRF保护。 由于数据保护在幕后用于MVC中的一些事情,极有可能一旦你开始向外扩展,你将需要共享钥匙圈。 在这两个包之前共享密钥的选项是使用网络共享与基于文件的密钥存储库。

Azure示例

  1. services.AddDataProtection()
  2. .AddAzureStorage(“<blob URI including SAS token>”);

Redis示例

  1. // Connect
  2. var redis = ConnectionMultiplexer.Connect("localhost:6379");
  3.  
  4. // Configure
  5. services.AddDataProtection()
  6. .PersistKeysToRedis(redis, "DataProtection-Keys");
  1.  

注意:当使用非持久性Redis实例时,使用Data Protection加密的任何内容将无法在实例重置后解密。 对于默认的认证流,这通常只是意味着用户被重定向到再次登录。 但是,对于使用Data Protections Protect方法手动加密的任何内容,您将无法完全解密数据。 因此,当手动使用Data Protection的Protect方法时,不应使用不持久的Redis实例。 数据保护针对短暂数据进行了优化。

备注

本文是针对ASP.NET Core 1.1 的简介,希望本文对你有所帮助

ASP.NET Core 1.1 简介的更多相关文章

  1. ASP.NET Core - Razor 页面简介

    简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面.在之前的一篇文章中,我们简要介绍了ASP.NET Core Razor 页面. Razor页面是ASP.NET Cor ...

  2. [asp.net core] Tag Helpers 简介(转)

    原文地址 https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro What are Tag Helpers? ...

  3. ASP.NET Core (一):简介

    下一篇:ASP.NET Core(二):入门 英文原版:Introduction to ASP.NET Core 关于ASP.NET Core ASP.NET Core 是一个全新的开源.跨平台框架, ...

  4. ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

    ASP.NET Core是微软新推出支持跨平台.高性能.开源的开发框架,相比起原有的ASP.NET来说,ASP.NET Core更适合开发现代应用程序,如跨平台.Dorker的支持.集成现代前端开发框 ...

  5. ASP.NET Core之项目文件简介及配置文件与IOC的使用

    原文地址:https://www.cnblogs.com/knowledgesea/p/7079880.html 序言 在当前编程语言蓬勃发展与竞争的时期,对于我们.net从业者来说,.Net Cor ...

  6. ASP.Net Core开发(踩坑)指南

    ASP.NET与ASP.NET Core很类似,但它们之间存在一些细微区别以及ASP.NET Core中新增特性的使用方法,在此之前也写过一篇简单的对比文章ASP.NET MVC应用迁移到ASP.NE ...

  7. ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...

  8. ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门

    一.前言 1.本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NE ...

  9. ASP.NET Core (二):入门

    上一篇:ASP.NET Core(一):简介 下一篇:(待续) 英文原版:Getting Started 1. 安装 .NET Core 2. 创建 .NET Core 项目 在命令提示符窗口输入命令 ...

随机推荐

  1. [翻译]开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  2. [NodeJS] 优缺点及适用场景讨论

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  3. ASP.NET内置对象的总结

    1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0  2. Requ ...

  4. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  5. HTML BOM Browser对象

    BOM:Browser Object Model,即浏览器对象模型,提供了独立于内容的.可以与浏览器窗口进行互动的对象结构. Browser对象:指BOM提供的多个对象,包括:Window.Navig ...

  6. CSS浮动、定位

    这几天有空,整理了关于CSS浮动和定位的一些知识点,有什么欠缺的地方,欢迎大家批评指正. 一.文档流的概念指什么?有哪种方式可以让元素脱离文档流? 文档流,指的是元素排版布局过程中,元素会自动从左往右 ...

  7. 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

    先看一下 .NET Core(包含 ASP.NET Core)的路线图: Beta6: 2015年7月27日 Beta7: 2015年9月2日 Beta8: 2015年10月15日 RC1: 2015 ...

  8. AJAX实现登录界面

    使用php跳转界面和AJAX都可实现登录界面的跳转的登录失败对的提醒.但是,php跳转的方式 需要额外加载其他界面,用户体验差.AJAX可实现当前页面只刷新需要的数据,不对当前网页进行 重新加载或者是 ...

  9. FullCalendar日历插件说明文档

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  10. 编译器开发系列--Ocelot语言7.中间代码

    Ocelot的中间代码是仿照国外编译器相关图书Modern Compiler Implementation 中所使用的名为Tree 的中间代码设计的.顾名思义,Tree 是一种树形结构,其特征是简单, ...