我在处理MVC 4 webAPI中的错误时面临一个大问题。在这里,我想验证传入请求并发回BadRequest响应。
为此我正在使用代码
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
return item;
}
但是如果是null id,VS2010会产生另一个错误,如
“处理HTTP请求导致异常。请参阅此异常的'Response'属性返回的HTTP响应以获取详细信息。”
如何解决此问题
提前致谢....
答案 0 :(得分:3)
您的代码实际上是正确的。您所看到的是Visual Studio坚持捕获未处理的异常(在您的应用程序中未处理)。
HttpResponseException
个异常由调用您的Web API的路由处理,您的代码只会生成404错误。
在Web服务器上安装代码后,如果不存在匹配的记录,则只会返回404错误。
虽然使用约束的建议对基本检查很有用,但404的实际用途是报告数据库中不存在特定的请求条目(而不是URL中不存在)。
答案 1 :(得分:2)
使用路由约束来禁用null
ID:@"\d+"
。这样,如果您未在URL中传递数字ID,则控制器操作甚至无法解决,并且路由引擎将直接返回404。
答案 2 :(得分:0)
我只想将参数更改为int?然后执行HasValue检查并抛出所需的异常。像这样(假设你想抛出相同的异常):
public Product GetProduct(int? id)
{
Product item;
if (id.HasValue){
item = repository.Get(id);
}
if (item == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
return item;
}
答案 3 :(得分:0)
如http://www.asp.net/web-api/overview/error-handling/exception-handling中所述,未捕获/未使用者处理的异常默认转换为HTTP响应。抛出HttpResponseException允许您指定大部分此HTTP响应(例如404 Not Found状态代码)。
正如TrueBlueAussie所提到的,Visual Studio仍将打破这些异常。要禁用此功能: