用于自托管模式的WebApi按请求存储

时间:2012-09-12 21:56:26

标签: asp.net-web-api self-hosting

托管WebApi是IIS时,您可以访问HttpContext,并可以使用items集合来存储单个HTTP请求的对象。

当自托管时,您不再拥有HttpContext,那么我可以使用什么来存储单个请求的对象?

2 个答案:

答案 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);
    }
}

这种方法适用于我的应用程序。