我遇到了捕获异常的问题
我的控制器中有以下方法
[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
答案 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);
}
...
}