我试图为web api控制器中的GET方法返回状态代码304 not modified。
我成功的唯一方法是这样的:
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 (正如所有使用GET的web api示例所示),而不是返回HttpResponseMessage或类似的内容。
发布于 2012-05-19 03:25:15
我不知道答案,于是ASP.NET团队here问道。
因此,诀窍是将签名更改为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);
}
发布于 2012-06-16 04:41:04
如果您希望将操作签名保留为返回用户,也可以执行以下操作:
public User GetUser(int userId, DateTime lastModifiedAtClient)
如果您想返回200
以外的其他内容,那么可以在操作中抛出一个HttpResponseException
,并传入要发送给客户端的HttpResponseMessage
。
发布于 2015-04-01 18:57:32
在MVC 5中,事情变得更容易了:
return new StatusCodeResult(HttpStatusCode.NotModified, this);
https://stackoverflow.com/questions/10655350
复制相似问题