首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hellang.Middleware.ProblemDetails误差映射

Hellang.Middleware.ProblemDetails误差映射
EN

Stack Overflow用户
提问于 2022-09-19 15:39:47
回答 1查看 162关注 0票数 0

我正在学习如何使用问题细节中间件找到这里

我的设置运行得很好,但我很好奇为什么它映射验证错误的方式不同于默认状态代码。

为了更好地解释,在所有者提供的回购示例中,请尝试以下操作:

调用https://localhost:54547/mvc/modelstate

响应"status":422

在项目的Program.cs中,注释掉MVC覆盖AddProblemDetailsConventions (第46行),然后再次调用

响应"status":400

400是在将ApiController属性添加到控制器时自动插入的验证错误的默认状态代码。

在前面与所有者这里的讨论中,建议调用AddProblemDetailsConventions

如果您希望从API中获得100%一致的错误响应(由中间件生成)。

我知道中间件是用来控制响应错误消息的“格式”以遵循RFC7870,但是为什么它要更改这个示例的错误代码呢?422比400更具体/更好吗?

我试图寻找更多的细节,但找不到任何细节。就像更改其他映射一样,或者如果有一种方法来配置中间件映射以获取默认验证错误(因为在我们的项目中,我们已经为验证场景在400上进行了测试断言)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-23 21:22:33

在与您引用的作者的谈话中,他确实提到了一种在这个职位中覆盖默认状态响应代码的方法。

对于422状态代码,我的意见是语法正确,但语义无效的请求应该返回与400 Bad请求不同的状态代码

他还提到,并非每个人都可以选择遵循该约定,因此他提供了一种覆盖默认设置的方法:

有些人不喜欢它(通常是因为它是WebDAV RFC的一部分,而不是“正式的”HTTP (但这种情况很快就会改变,淘汰了RFC 7231的在HTTPbis即将到来的HTTP语义RFC中包含422 ),所以我添加了一个选项来更改它:

并提供指向ProblemDetailsOptions.ValidationProblemStatusCode源代码值的链接。

您可以向这样的配置传递options值,从而将默认状态代码更改为400状态代码:

代码语言:javascript
复制
services.AddProblemDetails(options =>
{
    options.ValidationProblemStatusCode = 400;
});

或者,如果您喜欢使用私有配置方法,比如在示例库中:

代码语言:javascript
复制
private void ConfigureProblemDetails(ProblemDetailsOptions options)
    {
        options.ValidationProblemStatusCode = 400;

        // the rest of the code setup he used in the example
    }

至于其他已更改的映射,除了如果没有状态代码,则将状态代码设置为500。之外,我在默认情况下配置的源代码中看不到多少。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73775988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档