我正在使用ASP.NET核心,并试图弄清楚app.Run()
和app.UseEndpoints()
之间的区别。它们有没有一些优点/缺点?我试着在3.0中使用app.Run()
,但我不确定是否有必要这样做?有人能给点建议吗?
发布于 2021-08-03 07:29:17
区别是基本的,Edward已经做了很好的解释,但我相信一个更简单的解释会更好。App.Use用于将中间件添加到OWIN管道中,App.Run也用于相同的目的。不同之处在于,一旦添加了App.Run的中间件完成执行,流水线将终止,响应将返回给调用者。这是唯一的区别。让我举个例子。
app.Use((context, nextMidWare) => { context.Response.Body.Write("Written by app.Use"); nextMidWare(context);});
app.Run((context) => context.Response.Body.Write("Written by app.Run"));
app.Use((context, nextMidWare) => context.Response.Body.Write("Also written by app.Use"));
为了更好地表达我的解释,我对方法签名做了一些简化。鉴于这些是唯一注册的中间件,当您从浏览器请求网站时,结果将如下所示。
Written by app.Use
Written by app.Run
正如您可以观察到的,最后一条消息"Also written by app.Use“尚未写入响应。当然,原因是我们在使用App.Run注册了另一个中间件之后,又注册了相关的中间件。如果我们使用App.Use,那么我们也会观察到最后一条消息。
最后,App.UseEndpoints
类似于对App.Use方法的预先配置的调用,它为您提供了特定的功能,我建议您阅读一些关于这一问题的微软文档。
我建议你阅读这些:
https://stackoverflow.com/questions/58432973
复制相似问题