ASP.NET Core的9个秘诀

最近,我们将ASP.NET Core升级到了2.1版。 该平台的创建者之一,我们的同事David Fowler,分享了一些鲜为人知的实用功能。 此外,除了ASP.NET Core的9个秘密功能之外,您还可以在列表中找到包含所有有用链接的主要创新清单。 立即加入!



开放的ASP.NET Core平台2.1版已经发布,开发人员David Fowler 发了推文,其中提到了一些鲜为人知的有用功能。 当然,现在该平台速度更快,但是还有许多新功能和最佳实践值得更详细地考虑。

.NET通用主机


ASP.NET Core现在可以与新的托管模型一起使用。 .NET应用程序形成并启动主机

主机负责启动应用程序并管理其生命周期。 通用主机的目标是将HTTP管道与Web主机API分开,以便能够在主机上创建更多脚本。 消息传递,后台和其他非HTTP任务与端到端通用主机功能(例如配置,依赖项注入(DI)和日志记录)一起使用时效果更好。

这意味着现在对于没有Web托管的脚本,不仅有WebHost,而且还有通用主机。 同时,工作将与使用ASP.NET Core一样方便,但是您还将拥有新功能,例如DI,日志记录和配置。 通用主机的示例代码可以在GitHub上找到

IHOSTEDSERVICE界面


使用它,您可以在通用主机和Web应用程序中运行长时间的后台操作。 ASP.NET Core 2.1 引入了对 BackgroundService基类的支持 ,这大大促进了长异步循环的创建。 托管服务的示例代码也在GitHub上

创建一个简单的临时后台任务:

public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is starting."); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } 

容易!

.NET Core上的Windows服务


您现在可以在Windows服务中托管ASP.NET Core! 许多用户已请求添加此功能。 您不再需要IIS来承载所需的任何内容。 查看NuGet上的Microsoft.AspNetCore.Hosting.WindowsServices ,以及有关在Windows上将自己的ASP.NET Core应用程序作为Windows服务(不带IIS)托管的详细文档

 public static void Main(string[] args) { var pathToExe = Process.GetCurrentProcess().MainModule.FileName; var pathToContentRoot = Path.GetDirectoryName(pathToExe); var host = WebHost.CreateDefaultBuilder(args) .UseContentRoot(pathToContentRoot) .UseStartup<Startup>() .Build(); host.RunAsService(); } 

IHOSTINGSTARTUP-具有程序集属性的IWEBHOSTBUILDER配置


与往常一样,使用GitHub上的源代码进行简单,准确的实现。

 [assembly: HostingStartup(typeof(SampleStartups.StartupInjection))] 

共享源包


您会很感兴趣,请务必注意它们。 您可以创建用作通过共享源分发的源代码的辅助工具的软件包。 彼此之间,我们称它们为“共享源程序包”。 当需要共享某些内容时,它们会在ASP.NET Core的任何地方使用 ,但不应通过API公开访问。 然后将使用您的代码,但最终包将没有依赖项。

它们以这种方式用于CSPROJ。 请注意PrivateAssets属性:

 <PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" PrivateAssets="All" Version="" /> <PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" PrivateAssets="All" Version="" /> 

对象方法执行器


如果您需要通过反射使用某种类型的方法,并且该方法可以是异步的,则我们在ASP.NET Core代码库中随处使用的优化而灵活的ObjectMethodExecutor函数将为您提供帮助。

团队在MVC中使用此代码来调用您的控制器方法。 他们在SignalR中使用此代码来调用集线器方法。 它适用于同步和异步方法。 它还可以与自定义预期对象和F#异步工作流一起使用。

抑制状态消息


一种小型且经常使用的方法。 如果您不喜欢在托管Web应用程序时启动dotnet驱动程序后显示的内容(打印绑定信息),则可以使用新的SuppressStatusMessages扩展方法。

 WebHost.CreateDefaultBuilder(args) .SuppressStatusMessages(true) .UseStartup<Startup>(); 

附件


在2.1版中,配置需要服务的参数变得更加容易。 以前,您必须创建使用IConfigureOptions获得的类型,现在您可以使用AddOptions ‹TOptions›在ConfigureServices中完成所有这些操作›

 public void ConfigureServicdes(IServiceCollection services) { services.AddOptions<MyOptions>() .Configure<IHostingEnvironment>((o,env) => { o.Path = env.WebRootPath; }); } 

IHTTPCONTEXT和ADDHTTPCONTEXTACCESSOR


通常不需要配置IHttpContext,但是许多人想知道如何执行此操作 ,有些人认为这应该自动完成。 默认情况下不记录该日志,因为它的存在会导致性能下降。 但是,在ASP.NET Core 2.1中为扩展方法添加PR ,如果需要的话, 它将简化此过程

 services.AddHttpContextAccessor (); 

因此,ASP.NET Core 2.1 已准备好发布

此版本的新功能:


在ASP.NET Core文档中查看ASP.NET Core 2.1的更改列表,以了解有关这些功能的更多信息。 发行说明中提供了新版本中所有更改的完整列表。

试试看! 参加快速入门课程 ,您可以在10分钟内创建基本的Web应用程序。

Source: https://habr.com/ru/post/zh-CN416443/


All Articles