托管WebApi是IIS时,您可以访问HttpContext,并可以使用items集合来存储单个HTTP请求的对象。
当自托管时,您不再拥有HttpContext,那么我可以使用什么来存储单个请求的对象?
答案 0 :(得分:6)
显然,在自托管中没有直接相当于System.Web的HttpContext。
但是,如果您希望为单个请求启动信息,那么每个HttpRequestMessage都会公开一个< string,object>字典,称为Properties
- http://msdn.microsoft.com/en-us/library/system.net.http.httprequestmessage.properties.aspx,您可以使用它来传输数据处理程序,过滤器,粘合剂等之间。
答案 1 :(得分:0)
对于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);
}
}
这种方法适用于我的应用程序。