2014-11-03 50 views
1

在我當前的項目中,我將Angularjs與Asp.net Web Api 2結合使用,並嘗試使用一些標頭來確定工作流。Asp.Net Web Api中的If-Modified-Since 2

在一種情況下,我想只在「If-Modified-Since」-header被設置且值與存儲的實體相同時更新實體。

我的角度代碼看起來像以下:

$http.patch(selfLink, {message: item.message}, 
    { 
     headers: { 
      "Accept": "application/json", 
      "Content-Type": "application/json", 
      "If-Modified-Since": item.LastModified 
     } 
    } 
) 
.success(function(data, status, headers, config) { 
    if (successCallback) { 
     successCallback(); 
    } 
}) 
.error(function(data, status, headers, config) { 
    if (errorCallback) { 
     errorCallback(data, status); 
    } 
}); 

在Web API代碼看起來像以下:

public async Task<IHttpActionResult> Patch(int id, JObject updateEntity) 
{ 
    using(var session = this.store.OpenAsyncSession()) 
    { 
     var entity = await session.LoadAsync<TEntity>(id); 
     if(entity == null) 
     { 
      return NotFound(); 
     } 

     if(Request.Headers.IfModifiedSince.HasValue == false) 
     { 
      return BadRequest("Missing If-Modified-Since header"); 
     } 

     // More code 
    } 

} 

每個請求我做我會得到Request.Headers.IfModifiedSince.HasValue == false,但後來我想Request.Headers.GetValue("If-Modified-Since")我將獲得我要求的價值。

有誰知道爲什麼Request.Headers.IfModifiedSince屬性沒有設置?

回答

1

檢查您要發送的日期格式作爲標題值。日期必須根據RFC 1123標準進行格式化。如果

Request.Headers.GetValue("If-Modified-Since") 

是不是在這種格式,這可以解釋爲什麼

Request.Headers.IfModifiedSince 

爲空。