ASP.NET Core 6 Web API / C#:路由,POST方法,如何设置默认参数

ASP.NET Core 6 Web API / C# : routing, POST method, how to set default param

提问人:John 提问时间:11/17/2023 最后编辑:John 更新时间:11/17/2023 访问量:51

问:

在控制器顶部设置路由:

[Route("api/import/v1")]
[ApiController]
public class ImportController : ControllerBase
{
     // .....
}

并将其设置为测试函数:

[AllowAnonymous]
[HttpPost("{id1}/{id2}/{id3}")]
public ActionResult Test(string id1, string id2, string id3)
{
     // .....
}

在 Postman 中,如果我调用:

https://localhost:7045/api/import/v1/111/222/333

它击中了方法,一切都很好。POST

但是,如果 id3 字符串参数是可选的,我该如何设置默认值?

我试过:

[AllowAnonymous]
[HttpPost("{id1}/{id2}/{id3?}")]
public ActionResult Test(string id1, string id2, string? id3 = "000")
{
     // .....
}

和调用

https://localhost:7071/api/import/v1/111/222/null

但 ID3 设置为 null。

我也试过了

[AllowAnonymous]
[HttpPost("{id1}/{id2}/{id3}")]
public ActionResult Test(string id1, string id2, string? id3 = "000")
{
     // .....
}

但我得到相同的结果 - 作为 null 传入。id3

有什么想法吗?

更新 更新 更新只是为了测试目的,我添加了一个新功能

[AllowAnonymous]
[HttpPost("Test2")]
public ActionResult Test2(string id1, string id2, string? id3 = "000")
{
  // .....
}

如果我然后使用邮递员打电话 https://localhost:7045/api/import/v1/Test2?id1=111&id2=111&id3=

这将按预期返回 id1 = 111 id2 = 111 id3 = 000

但是当我尝试打电话时

https://localhost:7071/api/import/v1/111/222/

我收到 404 未找到

为什么当我尝试使用路由时它不起作用?

c# 发布 net-6.0 asp.net-mvc-routing

评论

0赞 Hamid Molareza 11/17/2023
我在 dotnet 7(不是 6)上测试它,没有问题。我也怀疑 dotnet 6 中是否存在这样的错误。我认为您应该创建一个新项目并在其上进行测试。如果它工作正常,则意味着您的项目设置(如 )存在问题,您应该查找该问题。program.cs
0赞 John 11/17/2023
感谢您的回复,请参阅对 Q 的更新
0赞 Hamid Molareza 11/17/2023
我也在 dotnet6 上对此进行了测试,一切都很好!您可以在此链接中看到我测试的来源。您可以自己克隆并测试它。
0赞 Hamid Molareza 11/17/2023
例如:对于响应是:没关系。curl -X 'POST' 'http://localhost:3000/api/import/v1/1/22' -H 'accept: */*' -d ''{"id1":"1","id2":"22","id3":"000"}
0赞 Md Farid Uddin Kiron 11/17/2023
不,如果您不提供它始终采用的值,那么当您设置默认路由参数时,您就错了,例如在这种情况下,但是如果您提供任何值,那么在您的场景中将始终被较新的值替换。我认为这是预期的行为。你到底在寻找什么?string id3 = "000"000000null

答: 暂无答案