【问题标题】:Get ErrorMessage from Response in Netcore 2.2 Web API从 Net Core 2.2 Web API 的响应中获取错误消息
【发布时间】:2019-05-31 14:41:36
【问题描述】:

我用空的用户名和密码调用注册方法。所以我收到了这个结果:

{
    "errors": {
        "Password": [
            "The Password field is required.",
            "Password length is between 4 and 8."
        ],
        "Username": [
            "The Username field is required."
        ]
    },
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "0HLJIO56EGJEV:00000001"
}

我的 Dto:

public class UserForRegisterDto
{
    [Required]
    public string Username { get; set; }
    [Required]
    [StringLength(8, MinimumLength = 4, ErrorMessage = "Password length is between 4 and 8.")]
    public string Password { get; set; }
}

我只想从响应中获取错误属性,我该怎么办?

【问题讨论】:

  • 您在哪里/如何验证故事?您能否更新您的问题以显示这一点。我使用 ModelState.IsValid 来检查模型状态,如果它无效,您可以只提取错误并在响应中返回。

标签: c# asp.net-core asp.net-core-2.2


【解决方案1】:

这是 ASP.NET Core 2.2 中的 new feature:

返回客户端错误状态代码 (4xx) 的 IActionResult 现在返回 ProblemDetails 正文。

docs 描述了在ConfigureServices 内部调用AddMvc 时可以禁用此功能,如下所示:

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
    .ConfigureApiBehaviorOptions(options =>
    {
        options.SuppressUseValidationProblemDetailsForInvalidModelStateResponses = true;
    });

这将导致 2.2 之前的行为,它将仅序列化错误。

【讨论】:

  • 谢谢,我修好了。我在 ConfigureApiBehaviorOptions 中添加了这段代码: options.SuppressModelStateInvalidFilter = true;成功了!
  • 你试过我的解决方案了吗?您所做的是修复自动验证,而不是专门避免它生成的更冗长的响应。
  • 是的!我试过你的解决方案。但是我收到的回复就像一开始一样。
【解决方案2】:

当我经历了一个非常接近的场景时,我将在这里添加一个答案,以防其他人遇到相同或类似的问题:

在我的例子中,问题涉及以 .NET Core 3.1 作为目标框架的项目。我的项目有一个 NuGet 包 dll 作为其依赖项之一,并且这样的包有几个模型。我们的控制器端点将这些模型作为参数。但是,发送到这些端点中的任何一个(将这些模型中的任何一个作为主体)的请求都会导致对不可为空的引用类型属性的验证错误。

解决该问题的解决方法类似于 Kirk 建议的解决方法。我在 Startup 的 ConfigureServices 方法中向 AddControllers 方法添加了以下选项:

services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);

请注意,通过使用此解决方法,有必要为您的应用程序周围的可空引用类型属性手动添加 [必需] 属性。

我还在他们的存储库上打开了一个问题:https://github.com/dotnet/aspnetcore/issues/27448

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多