我刚刚在我的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#。
谢谢!
答案 0 :(得分:2)
您可以执行两条路线:
[HttpGet]
[Route("GetDisplayContainer")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainer([FromQuery] Guid id)
{
}
和
[HttpGet]
[Route("GetDisplayContainer/{id}")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainerRoute([FromRoute] Guid id)
{
}
答案 1 :(得分:1)
如果您将路线从GetDisplayContainer
更改为GetDisplayContainer/{id}
,则Swagger将知道该参数不在查询字符串中,并应生成所需的输出。
完整代码:
[HttpGet]
[Route("GetDisplayContainer/{id}")]
public ApiResponse<ContainerDisplayViewModel> GetDisplayContainer(Guid id)
{
return ApiResponse.Convert(ResourceService, _containerService.GetDisplayContainerById(id));
}