【发布时间】:2023-01-09 05:06:11
【问题描述】:
我创建了一个 .NET 6 Minimal Web API,它需要支持特定格式的 URL。需要接受的URL类似于/sensor/sensor:123/measurement
下面是相关的Program.cs。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapGet("/sensor/sensor:{sensorId}/measurement", (int sensorId) =>
{
return Results.Ok();
});
app.Run();
但是,当我运行它并检查生成的 Swagger UI 时,我看到 GET URL 列为 /sensor/sensor}/measurement。正确尝试将 sensorId 显示为路径参数,但实际上通过此接口输入数据并执行会导致 404。
如果我将其修改为以下内容,我可以让它运行,并且它允许我在请求中传递冒号,但我更希望冒号是路由定义的一部分,因为它 a) 应该是和 b)需要额外的解析逻辑。
app.MapGet("/sensor/sensor{sensorId}/measurement", (string sensorId) =>
{
return Results.Ok();
});
有没有办法在 .NET 6 Minimal Web API 中允许/转义冒号,以便它们可以成为定义路由的一部分?
【问题讨论】:
-
冒号是 URI 中的一个特殊字符。尝试百分比编码。
-
@PoulBak
:在 URI 的路径部分中使用时不需要进行百分比编码(根据 RFC 3986),但我仍然会避免使用它,因为如果在非绝对 URI 中使用,那么许多库/工具/etc 很可能会将冒号解释为方案分隔符或其他组件。
标签: c# asp.net-web-api .net-6.0