在我目前的项目中,我使用Angularjs和Asp.net Web Api 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
属性?
答案 0 :(得分:2)
检查您要发送的日期格式作为标题值。必须根据RFC 1123标准格式化日期。如果
Request.Headers.GetValue("If-Modified-Since")
不是这种格式,这可以解释原因
Request.Headers.IfModifiedSince
为空。