如何在 ASP.NET Core 6 Web API 中路由 URL 参数值而不是 URL 路径值?

How to route through URL parameter values instead of URL path values in ASP.NET Core 6 Web API?

提问人:Shire 提问时间:10/15/2023 最后编辑:marc_sShire 更新时间:10/18/2023 访问量:24

问:

在客户端,我只能从 Web API 请求 URL 地址,但我需要提供许多不同的逻辑。

因此,我的 Web API URL 是

http://exampleDomain.com/ControllerDemo/HubActions?ActionName=(This url in client can't change)

当请求 url 为

http://exampleDomain.com/ControllerDemo/HubActions?ActionName=ActionA

它应该被路由到/ControllerDemo/ActionA

当请求 url 为

http://exampleDomain.com/ControllerDemo/HubActions?ActionName=ActionB

它应该被路由到/ControllerDemo/ActionB

asp.net-core-webapi net-6.0

评论


答:

0赞 Shire 10/15/2023 #1

在您的 ():Program.csImplicitUsings

只需在之前添加自定义中间件,如下所示:app.UseRouting()

app.Use(async (context, next) =>
{
    if (context.Request.Path == "/ControllerDemo/HubActions")
        context.Request.Path = $"/ControllerDemo/{context.Request.Query["ActionName"]}";
    await next(context);
});

app.UseRouting();

请参阅 MSDN 文档

如果选择了端点,则可以从 中检索。可以检查其特性。端点对象是不可变的,创建后无法修改。最常见的端点类型是 . 包括允许路由系统选择它的信息。HttpContextRouteEndpointRouteEndpoint