是啥让某些东西成为 ASP.NET Core 中的请求功能?
Posted
技术标签:
【中文标题】是啥让某些东西成为 ASP.NET Core 中的请求功能?【英文标题】:What makes something be a request feature in ASP.NET Core?是什么让某些东西成为 ASP.NET Core 中的请求功能? 【发布时间】:2016-05-01 20:46:02 【问题描述】:在 ASP.NET Core 中有一点我相信我还没有完全理解,那就是请求特性的想法。如the docs 中所述:
功能接口定义给定请求可能支持的特定 HTTP 功能。服务器定义了功能的集合,以及该服务器支持的初始功能集,但可以使用中间件来增强这些功能。
我对此的初步理解是,请求特性是服务器应该公开的所有东西,以便在应用程序管道上使用。也就是说,服务器应该执行的行为就像发送文件一样。
另一方面,例如身份验证请求功能。现在,我不确定身份验证是否属于这一类。这似乎不是应用程序应该调用的某些服务器行为,而是应用程序本身的问题。
这让我想知道是什么真正使某些东西成为请求功能。那么,是什么让某些东西成为 ASP.NET Core 中的请求功能?我最初的理解是错误的吗?将某项内容作为请求功能的决定背后的原因是什么?
【问题讨论】:
【参考方案1】:我对此的初步理解是,请求特性是服务器应该公开的所有东西,以便在应用程序管道上使用。也就是说,服务器应该执行的行为就像发送文件一样。
这是 http 功能的一种用途。它也是一种增强或点亮 HttpContext 上的行为的方法,例如缓冲、发送文件、身份验证、websockets。
中间件还可以添加特定于该中间件的功能,您可以查看以下示例:
异常处理程序中间件处理通过请求功能发生的异常 - https://github.com/aspnet/Diagnostics/blob/dev/src/Microsoft.AspNetCore.Diagnostics.Abstractions/IExceptionHandlerFeature.cs。 路由中间件通过请求功能将路由数据添加到当前 http 上下文 - https://github.com/aspnet/Routing/blob/dev/src/Microsoft.AspNetCore.Routing.Abstractions/IRoutingFeature.cs通常,这是一种将每个请求的行为和状态从服务器通过中间件流向应用程序的方式。
【讨论】:
以上是关于是啥让某些东西成为 ASP.NET Core 中的请求功能?的主要内容,如果未能解决你的问题,请参考以下文章
与 Request.RequestURI 等效的 ASP.NET Core MVC 是啥?
Asp.Net Core MVC 中的 IViewLocationExpander.PopulateValues() 是啥