【问题标题】:If-Modified-Since in Asp.Net Web Api 2Asp.Net Web Api 2 中的 If-Modified-Since
【发布时间】:2016-08-28 23:43:58
【问题描述】:

在我当前的项目中,我将 Angularjs 与 Asp.net Web Api 2 一起使用,并尝试使用一些标头来确定工作流程。

在一种情况下,我只想在设置了“If-Modified-Since”-header 并且值与存储的实体相同的情况下更新实体。

我的 Angular 代码如下所示:

$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 属性吗?

【问题讨论】:

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


    【解决方案1】:

    检查您作为标头值发送的日期格式。日期的格式必须符合RFC 1123 标准。如果

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

    不是这种格式,这可以解释为什么

    Request.Headers.IfModifiedSince
    

    为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 2011-10-03
      • 2020-08-04
      • 2023-03-31
      • 2020-12-27
      • 2019-09-21
      • 2011-01-13
      • 2012-04-19
      相关资源
      最近更新 更多