HttpResponseException不接受HttpStatusCode。

8

我正在尝试按照这个视频教程(大约在1分钟处)中描述的方法引发HttpResponseException

throw new HttpResponseException(HttpStatusCode.Unauthorized);

但是该应用程序无法编译,因为它会抛出以下错误:
The best overloaded method match for 'System.Web.Http.HttpResponseException.HttpResponseException(System.Net.Http.HttpResponseMessage)' has some invalid arguments

在MSDN文档中,它有一个接受HttpResponseMessage枚举的构造函数。http://msdn.microsoft.com/en-us/library/hh835324%28v=vs.108%29.aspx

我错过了什么?

谢谢


1
你能否也发布一下你的实际代码? - Sergey Kudriavtsev
当您创建HttpResponseException并击中右括号时,是否看到文档显示的两个构造函数或只有一个?如果只有一个,则您仅限于使用HttpResponseMessage....或者您正在使用与文档不同的框架版本。 - SASS_Shooter
2个回答

11
如果您正在使用RC版本,此内容已更改。尝试使用以下方式:
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));

如果我需要向客户发送一些消息呢? - Zote
4
创建一个HttpResponseMessage变量,设置Content属性,然后传递到HttpResponseException中。或者如果你想要更加高级的操作,可以参考这篇返回自定义错误类型的文章。 - smlync
什么是RC?我怎么知道自己是否正在使用RC? - starcorn
在发布此帖子时,Web API Release Candidate刚刚推出,这与原帖提到的Beta有所不同。如果您自六月初以来已下载Web API或将其作为最近的VS 2012 RTM的一部分使用,则我回答中提到的格式适用。 - smlync

6

我刚自己遇到了这个问题,很高兴看到smlync提供的答案,但是很失望地看到在这种情况下API变得更加啰嗦!依我之见,以下描述更倾向于“怪异”一词,尤其是当这个异常(尤其是以上所有异常)在每个控制器中反复出现时:

    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));

我可能会使用这个,也许你们中的一些人会发现它也很有用:
    throw new Http404NotFoundException();

放在您想要的任何位置:

使用以下内容:

public class Http404NotFoundException : HttpResponseException
{
    public Http404NotFoundException()
        : base(new HttpResponseMessage(HttpStatusCode.NotFound)) { }
}

亲爱的ASP.NET WebApi团队,这样做不是更简洁易懂吗?如果只为了这个状态码,那么也许可以加入其他常见状态码的等价物。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接