If-Modified-Since在Asp.Net Web Api 2中

时间:2014-11-03 06:46:38

标签: c# angularjs asp.net-web-api

在我目前的项目中,我使用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属性?

1 个答案:

答案 0 :(得分:2)

检查您要发送的日期格式作为标题值。必须根据RFC 1123标准格式化日期。如果

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

不是这种格式,这可以解释原因

Request.Headers.IfModifiedSince

为空。