我正在制作一个小型 Asp.net Core Web API 项目。我有一个如下所示的模型对象:
public class Order
{
public readonly int Quantity;
public Order(int quantity)
{
if (quantity < 0)
{
throw new ArgumentException("quantity");
}
this.Quantity = quantity;
}
}
和一个看起来像这样的 Controller :
[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
参数的值为“null”。我可以设置 asp.net 来做类似的事情吗?或者我必须重写 Order
构造函数才能不抛出异常?
最佳答案
使用DataAnnotation以 MVC 方式执行您正在执行的操作。
public class Order
{
[Range(1, Int32.MaxValue)]
public int Quantity { get; set; }
}
然后在你的 Controller 中执行以下操作:
[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 应用程序(带 View )中使用 Order
模型,您将因为 Range
获得客户端验证> 属性。
关于c# - 处理抛出 Controller 方法参数的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42182123/