一尘不染

从Web Api控制器返回http状态代码

c#

我试图返回状态304,但未对Web api控制器中的GET方法进行修改。

我成功的唯一方法是这样的:

public class TryController : ApiController
{
    public User GetUser(int userId, DateTime lastModifiedAtClient)
    {
        var user = new DataEntities().Users.First(p => p.Id == userId);
        if (user.LastModified <= lastModifiedAtClient)
        {
             throw new HttpResponseException(HttpStatusCode.NotModified);
        }
        return user;
    }
}

这里的问题是,这不是一个例外,它没有被修改,因此客户端缓存正常。我还希望返回类型为User(如所有Web
API示例使用GET所示)不返回HttpResponseMessage或类似内容。


阅读 311

收藏
2020-05-19

共1个答案

一尘不染

我不知道答案,所以在这里问ASP.NET团队。

因此,诀窍是将签名更改为HttpResponseMessage并使用Request.CreateResponse

[ResponseType(typeof(User))]
public HttpResponseMessage GetUser(HttpRequestMessage request, int userId, DateTime lastModifiedAtClient)
{
    var user = new DataEntities().Users.First(p => p.Id == userId);
    if (user.LastModified <= lastModifiedAtClient)
    {
         return new HttpResponseMessage(HttpStatusCode.NotModified);
    }
    return request.CreateResponse(HttpStatusCode.OK, user);
}
2020-05-19