簡體   English   中英

MVC4 WebApi在響應標頭中添加ETag

[英]MVC4 WebApi adding ETag in Response Header

我們在Mvc4中創建了一個REST服務,我試圖在WebApi方法的響應中添加ETag標頭。 它被添加到Header集合中,沒有任何錯誤,但是當我檢查Fiddler中的響應頭時,它不存在。

這是我用來在響應中寫標頭的方法:

    internal static HttpResponseMessage<T> GetResponse<T>(Tuple<T, Dictionary<string, string>> response)
    {
        HttpResponseMessage<T> httpResponse = new HttpResponseMessage<T>(response.Item1, HttpStatusCode.OK);

        if (response.Item2 != null)
        {
            foreach (var responseHeader in response.Item2)
            {
                if (string.Compare(responseHeader.Key, "ETAG", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    httpResponse.Headers.ETag = new System.Net.Http.Headers.EntityTagHeaderValue("\"" + responseHeader.Value + "\"");
                }
                else
                {
                    httpResponse.Headers.Add(responseHeader.Key, responseHeader.Value);
                }
            }
        }

        return httpResponse;
    }

您可以通過兩種方式做到這一點,您可以像這樣在ActionFilter.OnActionExecuted方法中設置ETag:

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) {
    actionExecutedContext.ActionContext.Response.Headers.ETag = new EntityTagHeaderValue(...);
}

但是無法將所需的值輕松地從控制器傳遞到ActionFilter。 第二種方法是更改​​您的WebAPI操作。 而不是返回模型類型,而是返回HttpResponseMessage:

[HttpGet]
public HttpResponseMessage MyActionMethod() {
    var result = // response data
    var response = Request.CreateResponse<MyType>(HttpStatusCode.OK, result);
    response.Headers.Add("Last Modified", result.Modified.ToString("R"));
    response.Headers.ETag = new System.Net.Http.Headers.EntityTagHeaderValue(CreateEtag(result));
    return response;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM