我试图返回状态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或类似内容。
我不知道答案,所以在这里问ASP.NET团队。
因此,诀窍是将签名更改为HttpResponseMessage并使用Request.CreateResponse。
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); }