在控制器顶部设置路由:
[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
为什么当我尝试使用路由时它不起作用?
通过参考文档网
您可以通过向路由参数添加问号来使 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”!