c# - 处理抛出 Controller 方法参数的构造函数?

标签 c# asp.net-web-api asp.net-core asp.net-core-webapi

我正在制作一个小型 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/

相关文章:

c# - 我将如何在报告查看器控件的报告服务中创建此报告?

c# - Nuget 恢复错误 : This folder contains more than one solution file

javascript - JQuery $.ajax - 未调用 done()

c# - 在 MediatR 管道上使用多个 FluentValidator

c# - Lync 2010 On Answer 事件?

c# - 如何通过 REST API .net 以二进制形式返回图像(不是 url)

.net - 引用system.web.cors

c# - 如何在 ASP.NET Core 2 中设置默认主页?

javascript - 带有 ReactJS 的 ASP.NET 6 - 使用 react-scripts 5.0.0 热重载时浏览器不刷新

c# - 对同一 WCF 服务的不同请求的不同超时