[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
[ProducesResponseType(StatusCodes.Status303SeeOther)]
[HttpPost]
[Route("RegisterUsers")]
public async Task<ActionResult<List<UsersInfo>>> RegisterUsers(List<UsersInfo> Users)
{
    // .. how to detect errors here ...
    return Users;
}
 

我如何在这里收到错误,特别是当API在Body中收到错误的UserInfo类型格式时?

方法实现永远不会在用户信息类型错误的情况下运行.

推荐答案

这取决于它是Web API还是ASP MVC.

假设您有Web API,[ApiController]属性会使模型验证错误自动触发HTTP400响应. 因此,以下代码在操作方法中是不必要的:

    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

HTTP 400响应的默认响应类型为ValidationProblemDetails.

如果您需要记录此类自动响应,您可以将InvalidModelStateResponseFactory设置为一个定制函数,该函数首先执行日志(log)记录,然后返回适当的BadRequestObjectResult

例如,您可以try 这样做(参见original documentation)

builder.Services.AddControllers()
    .ConfigureApiBehaviorOptions(options =>
    {
      // To preserve the default behaviour, capture the original delegate to call later.
        var builtInFactory = options.InvalidModelStateResponseFactory;

        options.InvalidModelStateResponseFactory = context =>
        {
            var logger = context.HttpContext.RequestServices
                                .GetRequiredService<ILogger<Program>>();

            // Perform logging here.
            // ...

            // Invoke the default behaviour, which produces a ValidationProblemDetails
            // response.
            // To produce a custom response, return a different implementation of 
            // IActionResult instead.
            return builtInFactory(context);
        };
    });

Csharp相关问答推荐

.请求()不适用于Azure AD B2C的C#

如何定义所有项目的解决方案版本?

如何使用Microsoft Curve API从搜索的文件中获取内容(文本)?

Rx.Net -当关闭序列被触发时如何聚合消息并发出中间输出?

限制特定REST API不被访问,但部署代码

返回TyedResults.BadRequest<;字符串>;时问题详细信息不起作用

将现有字段映射到EFCore中的复杂类型

ASP.NET配置kestrel以使用Windows证书存储中的HTTPS

由于POST中的应用程序/JWT,出现不支持的内容类型异常

我如何让我的秒表保持运行场景而不重置

C#带主体的主构造函数?

在swagger示例中添加默认数组列表

C#中Java算法的类似功能

TagHelpers在新区域不起作用

Linux Docker上的.NET6在某个时间抛出后,在加密操作期间发生System.Security.Cryptography.CryptographicException:错误

如何在发布NuGet包之前设置命名空间?

我是否应该注销全局异常处理程序

数据库操作预计影响1行,但实际影响0行; after _dbContext.SaveChanges();

为什么连接到Google OAuth2后,结果.Credential为空?

SharpZipLib在文件名前加上目录名,生成tar.gz