加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC Web API缓存控制头部没有发送响应,

发布时间:2020-12-15 23:43:50 所属栏目:asp.Net 来源:网络整理
导读:我试图在ASP.NET MVC Web API中设置缓存头,但IIS的响应表明CacheControl值被忽略. 我原来的假设是我在System.Web.Http.Cors中使用了EnableCorsAttribute,这在这个用例中是必需的.然而,即使没有该属性,响应Cache-Control头仍然是“私有”. 有没有什么我在这里
我试图在ASP.NET MVC Web API中设置缓存头,但IIS的响应表明CacheControl值被忽略.

我原来的假设是我在System.Web.Http.Cors中使用了EnableCorsAttribute,这在这个用例中是必需的.然而,即使没有该属性,响应Cache-Control头仍然是“私有”.

有没有什么我在这里做错了?

// GET api/<version>/content
    // [EnableCors(origins: "*",headers: "*",methods: "*")]
    public HttpResponseMessage Get(HttpRequestMessage request)
    {
        int cacheMaxAgeSeconds;

        string cacheMaxAgeString = request.GetQueryString("cache-max-age") ?? request.GetQueryString("cache-max-age-seconds");

        string rawUri = request.RequestUri.ToString();

        try
        {
            cacheMaxAgeSeconds = cacheMaxAgeString == null ? Config.ApiCacheControlMaxSeconds : int.Parse(cacheMaxAgeString);
        }
        catch (Exception ex)
        {
            cacheMaxAgeSeconds = Config.ApiCacheControlMaxSeconds;

            //... 
        }

        try
        {
            //...

            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("...",Encoding.UTF8,"application/json")
            };

            response.Headers.CacheControl = new CacheControlHeaderValue
            {
                Public = true,MaxAge = TimeSpan.FromSeconds(cacheMaxAgeSeconds)
            };

            return response;
        }
        catch (Exception apiEx)
        {
            //...
        }
    }

响应

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/json; charset=utf-8
Date: Thu,23 Jul 2015 10:53:17 GMT
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=knjh4pncbrhad30kjykvwxyz; path=/; HttpOnly
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 2367
Connection: keep-alive

解决方法

以下代码在vanilla WebApi应用程序(System.Web.Http 4.0.0.0)中正确设置“cache-control:public,max-age = 15”.所以…它可能不是WebApi本身导致的问题.

您的项目中可能会有一些魔法改变缓存设置(想到全局动作过滤器或类似的东西).或者也许你正在通过代理重写HTTP头.

public HttpResponseMessage Get()
    {
        var content = new JavaScriptSerializer().Serialize(new { foo = "bar" });

        var response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(content,"application/json")
        };

        response.Headers.CacheControl = new CacheControlHeaderValue
        {
            Public = true,MaxAge = TimeSpan.FromSeconds(15)
        };

        return response;
    }

// returns in the response: "Cache-Control: public,max-age=15"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读