繁体   English   中英

WebApi 2路由? 要么 /

[英]WebApi 2 routing with ? or /

我刚刚在我的api中添加了大张旗鼓地生成一些文档...

通常,我的前端代码将执行如下“通过ID获取”的操作:

https://whatever.com/api/GetDisplayContainer/A90555CD-931E-4D9D-D51D-08D63E83FCC6

但是,大摇大摆的“尝试一下”想要发送:

https://whatever.com/api/GetDisplayContainer?id=A90555CD-931E-4D9D-D51D-08D63E83FCC6

我希望能够同时支持这两种方式。 我该怎么做?

这是控制器方法的示例:

[HttpGet]
[Route("GetDisplayContainer")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainer(Guid id)
{
    return ApiResponse.Convert(ResourceService, _containerService.GetDisplayContainerById(id));
}

我真的不需要更改现有代码以“查询字符串”的方式进行操作。 因为这是一种完全有效的方式。 但是能够同时支持这两者将是非常好的...

这是使用.net core 2.1的C#。

谢谢!

您可以执行以下两条路线:

[HttpGet]
[Route("GetDisplayContainer")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainer([FromQuery] Guid id)
{
}

[HttpGet]
[Route("GetDisplayContainer/{id}")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainerRoute([FromRoute] Guid id)
{
}

如果将路由从GetDisplayContainer更改为GetDisplayContainer/{id}则Swagger将知道该参数不在查询字符串中,并应生成所需的输出。

完整代码:

[HttpGet]
[Route("GetDisplayContainer/{id}")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainer(Guid id)
{
    return ApiResponse.Convert(ResourceService, _containerService.GetDisplayContainerById(id));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM