无法捕获c#web api异常

时间:2018-03-13 15:16:09

标签: c# asp.net .net

我遇到了捕获异常的问题

我的控制器中有以下方法

[HttpPost]
public void Register(SampleModel request)
{
    //Some code
}

在Postman中如果我在xml或json中发送我的示例请求它会自动映射到我的POCO SampleModel,我使用封装对传递的字段进行一些数据验证,例如,如果传递的其中一个属性为null我抛出一个参数null异常。

我的问题是:如何在控制器中捕获该异常并将异常消息返回给客户端/用户?

我想到的一个场景是拥有我的模型的副本,没有参数需求检查,然后在我的控制器中将无参数检查模型传递给try catch块中的参数检查模型,但是看起来并不高效。

下面是我模型中某个属性的示例

private string _client;
public string Client
{
    get { return _client; }
    set 
    { 
        if(string.isNullOrEmpty(value) throw new ArgumentNullException(); 
        _client = value;
    }   
} 

我正在使用C#5.0

2 个答案:

答案 0 :(得分:0)

您可以在控制器操作中使用简单的try catch和return以及带有状态500的HttpResponseMessage - Http状态代码内部服务器错误以及您的消息作为内容来捕获它。

如果一切正常,则返回状态为200的HttpResponseMessage。

这种验证方式仍然不正确,如果输入错误4xx状态代码更好。

答案 1 :(得分:0)

如果您有一个WebApi Action返回void(您的示例)或模型,则可以通过抛出HttpResponseException来返回错误响应。框架包括对HttpResponseException的适当处理。类似的东西:

例如:

[HttpPost]
public void Register(SampleModel request)
{
    if (request == null)
    {
        var response = Request.CreateErrorResponse(
             HttpStatusCode.BadRequest, 
             "Missing or invalid SampleModel");
        throw new HttpResponseException(response);
    }
    ...
}