首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Web Api控制器返回http状态代码

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

Stack Overflow用户
提问于 2012-05-18 23:20:40
回答 12查看 360.6K关注 0票数 244

我试图为web api控制器中的GET方法返回状态代码304 not modified。

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

代码语言:javascript
复制
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或类似的内容。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2012-05-19 03:25:15

我不知道答案,于是ASP.NET团队here问道。

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

代码语言:javascript
复制
[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);
}
票数 270
EN

Stack Overflow用户

发布于 2012-06-16 04:41:04

如果您希望将操作签名保留为返回用户,也可以执行以下操作:

代码语言:javascript
复制
public User GetUser(int userId, DateTime lastModifiedAtClient) 

如果您想返回200以外的其他内容,那么可以在操作中抛出一个HttpResponseException,并传入要发送给客户端的HttpResponseMessage

票数 68
EN

Stack Overflow用户

发布于 2015-04-01 18:57:32

在MVC 5中,事情变得更容易了:

代码语言:javascript
复制
return new StatusCodeResult(HttpStatusCode.NotModified, this);
票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10655350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档