我正在制作一个小型的Asp.net核心Web API项目。我有一个模型对象,如下所示:
public class Order
{
public readonly int Quantity;
public Order(int quantity)
{
if (quantity < 0)
{
throw new ArgumentException("quantity");
}
this.Quantity = quantity;
}
}
和一个看起来像这样的控制器:
[Route("api/[controller]")]
public class OrderController : Controller
{
[HttpPost]
public IActionResult Post([FromBody]Order order)
{
// Do stuff...
return this.StatusCode(200);
}
}
如果我传递了具有正数量的Order
对象,则Post
方法可以正常工作。但是,如果我传递带有负数的Order
,则Order
构造函数会抛出由我的应用程序或asp.net处理的异常。
如何以优雅的方式处理此异常?我注意到,如果我传递一个语法无效的请求(例如,格式错误的JSON),则没有异常,order
参数的值为&#39; null&#39;。我可以设置asp.net做类似的事情吗?或者我必须重写Order
构造函数以不抛出?
答案 0 :(得分:4)
使用DataAnnotation来做你正在做的MVC方式。
public class Order
{
[Range(1, Int32.MaxValue)]
public int Quantity { get; set; }
}
然后在你的控制器中执行以下操作:
[HttpPost]
public IActionResult Post([FromBody]Order order)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Do stuff...
return new HttpResponseMessage(HttpStatusCode.OK);
}
另一方面是,如果您决定在MVC Web应用程序(带有视图)中使用Order
模型,则会因Range
属性而获得客户端验证。