2012-07-18 24 views
2

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

這裏是我以前在響應寫頭的方法:

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; 
    } 
+0

如果我添加任何其他自定義標題例如ClientId:1234它將被返回,但不會返回ETag和Date標頭。 – Lalit 2012-07-18 09:37:00

回答

4

你可以這樣做2種方式,你可以設置的ETag在ActionFilter.OnActionExecuted方法是這樣的:

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; 
}