当托管 WebApi 是 IIS 时,您可以访问 HttpContext 并且可以使用项目集合来存储单个 HTTP 请求的对象。
自托管时,您不再拥有 HttpContext,那么我可以使用什么来存储单个请求的对象?
当托管 WebApi 是 IIS 时,您可以访问 HttpContext 并且可以使用项目集合来存储单个 HTTP 请求的对象。
自托管时,您不再拥有 HttpContext,那么我可以使用什么来存储单个请求的对象?
显然,自宿主中没有 System.Web 的 HttpContext 的直接等价物。
但是,如果您希望为单个请求启动信息,则每个 HttpRequestMessage 都会公开一个 <string,object> 字典,称为Properties
- http://msdn.microsoft.com/en-us/library/system.net.http。 httprequestmessage.properties.aspx,您可以使用它在处理程序、过滤器、活页夹等之间传输数据。
对于 selfhost(不涉及 IIS),您可以构造一个派生自System.Web.Http.Filters.ActionFilterAttribute
类型的属性类(在程序集 system.web.http .net 4.0+ 中)。然后重写 OnActionExecuted 方法,如下所示:
public class NoResponseCachingAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Response.Headers.CacheControl == null)
actionExecutedContext.Response.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue();
actionExecutedContext.Response.Headers.CacheControl.NoCache = true;
actionExecutedContext.Response.Headers.CacheControl.NoStore = true;
actionExecutedContext.Response.Headers.CacheControl.MustRevalidate = true;
base.OnActionExecuted(actionExecutedContext);
}
}
这种方法适用于我的应用程序。