c# .net核心API控制器混合路由参数和查询参数



我有一个url(我不能真正修改),id作为路由的一部分,然后开始日期和结束日期作为查询参数。

我不知道如何混合路由参数和查询参数并绑定它们。

https://localhost: 7285/api/roomEvents/1 ?开始= 2022 - 10 - 30 - t00 % 3 a00 % 3 a00-04 % 3 a00&结束= 2022 - 12 - 11 - t00 % 3 a00 % 3 a00-05 % 3 a00

我正在努力绑定id,开始和结束字符串在我的c# web api控制器。

我试过了

public class RoomEvents : BaseApiController
{
[AllowAnonymous]
[HttpGet("{id}?start={start}&end={end}")]
public async Task<ActionResult> GetRoomEvents(string id, string start, string end)
{
return HandleResult(await Mediator.Send(new EventsByRoom.Query { Id = id, Start = start, End = end }));
}

}

但是我得到

系统。ArgumentException HResult=0x80070057 Message=字面量节"?Start ='无效。文字部分不能包含'?'的性格。
Source=Microsoft.AspNetCore.Routing

您需要将[HttpGet]路径和方法参数更改为

[HttpGet("{id}")]
public async Task<ActionResult> GetRoomEvents(
string id,
[FromQuery] string start,
[FromQuery] string end)
...

第一个参数id将绑定到路径的{id}部分。对于后两个参数,您要显式地告诉ASP。. NET,你想绑定到查询参数的名称startend(使用[FromQuery])。

你也可以为id指定[FromRoute]如果你想要显式的,但这是默认的。

最新更新