4

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

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

4

2 回答 2

6

显然,自宿主中没有 System.Web 的 HttpContext 的直接等价物。

但是,如果您希望为单个请求启动信息,则每个 HttpRequestMessage 都会公开一个 <string,object> 字典,称为Properties- http://msdn.microsoft.com/en-us/library/system.net.http。 httprequestmessage.properties.aspx,您可以使用它在处理程序、过滤器、活页夹等之间传输数据。

于 2012-09-12T22:15:09.527 回答
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);
    }
}

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

于 2013-02-08T15:53:29.557 回答