自定义验证错误的自动响应

2024-04-12

在 asp.net core 2.1 中,当发生验证错误时,ApiController 将自动响应 400 BadRequest。

如何更改/修改发送回客户端的响应(json-body)?有某种中间件吗?

我正在使用 FluentValidation 来验证发送到控制器的参数,但我对得到的响应不满意。看起来像

{
    "Url": [
        "'Url' must not be empty.",
        "'Url' should not be empty."
    ]
}

我想更改响应,因为我们有一些附加到响应的默认值。所以它应该看起来像

{
    "code": 400,
    "request_id": "dfdfddf",
    "messages": [
        "'Url' must not be empty.",
        "'Url' should not be empty."
    ]
}

The ApiBehaviorOptions https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.apibehavioroptions?view=aspnetcore-2.1类允许生成ModelState通过其定制响应InvalidModelStateResponseFactory https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.apibehavioroptions.invalidmodelstateresponsefactory?view=aspnetcore-2.1#Microsoft_AspNetCore_Mvc_ApiBehaviorOptions_InvalidModelStateResponseFactory属性,其类型为Func<ActionContext, IActionResult>.

这是一个示例实现:

apiBehaviorOptions.InvalidModelStateResponseFactory = actionContext => {
    return new BadRequestObjectResult(new {
        Code = 400,
        Request_Id = "dfdfddf",
        Messages = actionContext.ModelState.Values.SelectMany(x => x.Errors)
            .Select(x => x.ErrorMessage)
    });
};

传入的ActionContext https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.actioncontext?view=aspnetcore-2.1实例同时提供ModelState https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.actioncontext.modelstate?view=aspnetcore-2.1#Microsoft_AspNetCore_Mvc_ActionContext_ModelState and HttpContext https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.actioncontext.httpcontext?view=aspnetcore-2.1#Microsoft_AspNetCore_Mvc_ActionContext_HttpContext活动请求的属性,其中包含我期望您可能需要的所有内容。我不确定你在哪里request_id值来自,所以我将其作为静态示例。

要使用此实现,请配置ApiBehaviorOptions实例在ConfigureServices:

serviceCollection.Configure<ApiBehaviorOptions>(apiBehaviorOptions =>
    apiBehaviorOptions.InvalidModelStateResponseFactory = ...
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义验证错误的自动响应 的相关文章

  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 我可以使用 iOS 推送通知来进行应用程序实时内容更新吗?

    我想使用没有徽章 消息或声音的推送通知消息 仅使用与应用程序相关的 JSON 以便实时更新应用程序的内容 当应用程序未运行时 这些通知毫无用处 因此当应用程序进入后台或用户空闲时 向我的服务器发送取消订阅 我不会发送它们 并在应用程序进入前
  • Scrapy:测试内联请求的有效方法

    我使用 scrapy inline requests 库编写了一个蜘蛛 所以我的蜘蛛中的解析方法看起来像这样 inline requests def parse self response1 item MyItem loader ItemL
  • python 原始字符串符号抛出带有尾部斜杠的错误

    我正在尝试使用原始字符串表示法在 python 中设置字符串变量的路径 但出现尾部斜杠错误 datapath r C path to my data 给我一个 扫描字符串文字时 EOL 错误 我认为原始字符串表示法应该将所有内容都包含在字符
  • 如何删除 HTML 正文中签名上方自动生成的行?

    When I Display邮件 要添加签名 签名上方添加两行空行 有没有办法删除它们 使邮件看起来更好 而不丢失签名格式 With objOutlookMsg SentOnBehalfOfName email protected cdn
  • getResource 使用 java 1.7 windows 7 在磁盘名称之前放置一个前导 /

    以下在磁盘名称之前给出了一个前导斜杠 我怎样才能避免这种情况 String pngpath getClass getResource resources image png getPath System out println pngpat
  • Restcomm gmlc 配置问题 主要地址不存在本地 SSN

    我在尝试在 Windows Server 2008 R2 上配置 Restcomm gmlc 时遇到问题 我收到这条消息 下图是HLR和Windows服务器的设置 以下是设置 GmlcManagement gmlcproperties xm
  • 如何用 Cocoa 获得准确的分贝值?

    我们正在创建一个应用程序 它可以记录周围的声音 并在声音超过指定分贝时采取必要的措施 为了实现应用程序目标 我们使用 AudioQueueObject h 中的以下方法 void getAudioLevels Float32 levels
  • innerHTML 将 CDATA 转换为注释

    我正在尝试使用 javascript 将一些 HTML 插入到页面中 并且我插入的 HTML 包含 CDATA 块 我发现 在 Firefox 和 Chrome 中 CDATA 正在转换为注释 HTML 不在我的控制之下 所以我很难避免使用
  • 在不知道编码的情况下如何读取编码头?

    如果我正在读取 HTML 文件的 XML 我是否必须读取告诉我编码的标签才能读取该文件 该标签的编码方式与文件的编码方式不一样吗 我很好奇你如何在不知道编码的情况下读取该标签 我意识到这个问题已经解决了 我只是好奇它是如何完成的 Updat
  • 在计算机上找不到 MySQL

    我最近直接从网站 mysql 5 7 9 osx10 10 x86 64 dmg 安装了MySQL 并且在尝试更改给定密码时遇到了很大的困难 返回的错误是 警告 在命令行界面上使用密码可能会导致 没有安全感 mysqladmin 连接到 l
  • Java:从 FTP 服务器访问文件

    我有一个 FTP 服务器 里面有一堆文件夹和文件 我的程序需要访问该服务器 读取所有文件并显示它们的数据 出于开发目的 我一直在使用硬盘驱动器上 src 文件夹中的文件 但现在服务器已启动并运行 我需要将软件连接到它 基本上我想要做的是获取
  • 是否可以获取 Stream 中的下一个元素?

    我正在尝试转换for loop到功能代码 我需要向前看一个值 也需要向后看一个值 是否可以使用流 以下代码是将罗马文本转换为数值 不确定带有两个 三个参数的reduce方法是否可以在这里提供帮助 int previousCharValue
  • 在 Windows 环境中使用 Gnustep 在 Objective-C 中进行编程

    我正在使用 Windows 并且想开始学习如何使用 Objective C 进行编程 我安装了 Gnustep 但无法确定如何构造和构建项目 等效 也找不到 IDE 请参阅Gnustep 入门 https stackoverflow com
  • 选择com的理由

    我想知道为什么人们会选择 Com 作为他的软件开发 技术 我的第一个想法是机器 编程语言的独立性 你的是啥呢 COM 是 Windows 上自动化和 IPC 的事实上的标准 尽管 Net 已经开始转移焦点 因此有些领域您根本没有 或没有 选
  • 在python中查找关键字后的单词[重复]

    这个问题在这里已经有答案了 我想查找出现在关键字 由我指定和搜索 之后的单词并打印出结果 我知道我应该使用正则表达式来做到这一点 我也尝试了一下 如下所示 import re s hi my name is ryan and i am ne
  • 如何从 Django 中的请求对象获取 URI?

    如何从 Django 中的请求对象获取 URI 有 request uri 吗 request META REQUEST URI or request get full path 你往往会产生大量琐碎的问题 你可以在文档 谷歌中轻松找到答案
  • NSTokenField 捕获一些 NSEvents

    我需要为 NSTokenField 和解决方案实现 Command Enter Command O 和 Esc 快捷键https stackoverflow com a 18486965 1067147 https stackoverflo
  • 如何使用 Javascript 访问网络摄像头 [重复]

    这个问题在这里已经有答案了 我用谷歌搜索了很长一段时间关于这个话题 没有任何令人满意的结果 实际上我的基本问题是 有没有可能使用 Javascript 访问网络摄像头 也许用 HTML5
  • jQuery .val() 与 .attr("value")

    我本来以为这两个是一样的 但看起来不是 我一般都用过 obj attr value 使用表单字段 但在我当前正在构建的页面上 obj attr value 不返回我在字段中输入的文本 然而 obj val does 在我构建的另一个页面上
  • 自定义验证错误的自动响应

    在 asp net core 2 1 中 当发生验证错误时 ApiController 将自动响应 400 BadRequest 如何更改 修改发送回客户端的响应 json body 有某种中间件吗 我正在使用 FluentValidati