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

问题描述 投票:0回答:1

在控制器顶部设置路由:

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

并将其设置为测试功能:

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

在邮递员中,如果我打电话:

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 被设置为空。

我也尝试过

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

但我得到相同的结果 -

id3
作为 null 传入。

请问有什么想法吗?

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

[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 Not Found

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

c# post asp.net-core-webapi .net-6.0 asp.net-mvc-routing
1个回答
0
投票

通过参考文档网

您可以通过向路由参数添加问号来使 URI 参数可选。如果路由参数是可选的,则必须为方法参数定义默认值。

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

以下两项均有效

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

如果您在

id3
的位置路径任何文本,它将是
id3
的字符串值,不路径任何内容,它将被视为“000”!

© www.soinside.com 2019 - 2024. All rights reserved.