c# - dot Net Core MVC 中 HttpMethodAttribute 的奇怪歧义
问题描述
我注意到 .Net Core 中 MVC 路由的意外行为。由于我没有预料到这种行为并且我不知道解决它的简单方法,所以我请求您的帮助。:)
[HttpPut("obj/{pk?}")]
public IActionResult SaveObj(decimal? pk, [FromBody] ObjDef obj)
{
[..]
}
一切正常。我可以通过请求 Put on 添加新对象/obj
并通过请求更新它/obj/1
。
我的惊喜是,当我请求像/obj/AStringValue
SaveObj 方法一样放入 uri 时,仍然会调用空 PK 值,因此如果请求具有正确的有效负载,则会创建新的 obj。
我的期望是获得 404 标头,因为显然在我的任何控制器中都没有声明这样的路径。
作为一种解决方法,我提出了两种方法——一种具有强制十进制参数 PK,另一种根本没有参数,但是具有十进制 PK 的方法仍然被触发,pk 等于 0!这在我看来是完全不正确的。
我应该如何处理这种行为?或者我在这里做错了什么......
我的 AspNetCore MVC 版本是 2.2.0
解决方案
您可以使用路由约束来验证路由参数的类型。如果约束失败,则返回 404,就好像该路由根本不存在一样。在您的情况下,您可以使用decimal
约束,如下所示:
[HttpPut("obj/{pk:decimal?}")]
这表明这pk
是可选的,但是当它被提供时,它必须是一个有效的十进制值。
推荐阅读
- c++ - 在 iOS 上进入后台时,libcurl 7.70.0 偶尔会崩溃
- c# - 如何使用 EntityFramework 将作为字符串列表作为字段之一的 JSON 对象存储到 SQL 中
- javascript - PHP 库中的 Javascript 依赖项
- python - 将参数 self 传递给函数
- python - 你能给我一个分享我的python程序的方法吗?
- reactjs - react setstate 在循环中无法正常工作
- java - 如何为我的 HTTP GET 方法的 URL 设置变量端点?
- arrays - 具有唯一元素的 np 数组行
- xamarin.android - 一个小图像在 ImageView 中拉伸,其尺寸大于主图像
- python - 使用 Pandas 中的查询从 SQL 表中删除记录