我正在构建一个Blazor WASM应用程序,它从我自己的API端点获取数据。url看起来像这样:/api/{controller}.
端点允许按id进行过滤,在某些情况下是负整数。当使用调试器运行应用程序时,一切都按预期工作:
Request finished HTTP/2 GET https://localhost:7133/api/plannedworkhours?From=2021-02-01&To=2021-02-14&SpotId=-1
但是,在没有调试的情况下运行代码时,模型状态无效,控制器抛出错误请求(这是在模型状态无效时打算使用的),并显示以下日志:
Request finished HTTP/2 GET https://localhost:7133/api/plannedworkhours?From=2021-02-01&To=2021-02-14&SpotId=%E2%88%921
似乎url解码有问题,对吗?当没有负整数作为形参时,它按预期工作。
来自应用程序的请求看起来像这样:
var url = $"/api/plannedworkhours?From={startTime.ToString("yyyy-MM-dd")}&To={endTime.ToString("yyyy-MM-dd")}";
if (spotIds != null && spotIds.Length > 0)
{
url += $"&{string.Join("&", spotIds.Select(sid => $"SpotId={sid}"))}";
}
return await client.GetFromJsonAsync<List<PlannedWorkHourModel>>(url);
这是api点:
public async Task<IActionResult> Get([FromQuery] PlannedWorkHoursQuery filter)
{
if (!ModelState.IsValid)
{
throw new BadRequestException(); //This exception is thrown when running without debugging, but not while debugging
}
....
}
这是查询参数:
public class PlannedWorkHoursQuery
{
public DateTime? From { get; set; }
public DateTime? To { get; set; }
public short[] SpotId { get; set; }
}
由于SpotId是一个数组,它应该在您的查询字符串
中看起来像这样...&SpotId[0]=-1
更新由于在现实中您有SpotId[0]=%E2%88%921尝试将SpotId更改为
public string[]? SpotId { get; set; }