首页 新闻 会员 周边

ASP.NET Core 6 中如何实现基于请求头的路由

0
悬赏园豆:30 [已解决问题] 解决于 2022-02-11 17:45

想在 ASP.NET Core 6 中基于 X-Forwarded-Host 请求头(request header)路由到对应的 Controller Action,请问如何实现?

dudu的主页 dudu | 高人七级 | 园豆:30943
提问于:2022-02-11 11:32
< >
分享
最佳答案
1

DynamicRouteValueTransformer 专治路由疑难杂症,用它解决了

1)继承 DynamicRouteValueTransformer 实现 DemoRouteValueTransformer

public class DemoRouteValueTransformer : DynamicRouteValueTransformer
{
    public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
    {
        if (httpContext.Request.Headers.TryGetValue("X-Forwarded-Host", out var forwardedHost)
            && forwardedHost.ToString().Equals("q.cnblogs.com", StringComparison.OrdinalIgnoreCase))
        {
            values = values ?? new RouteValueDictionary();
            values["controller"] = "Home";
            values["action"] = "Demo";
        }

        return ValueTask.FromResult(values);
    }
}

2)注册 DemoRouteValueTransformer 到 DI 容器

services.AddScoped<DemoRouteValueTransformer>();

3)添加动态路由规则

app.UseEndpoints(endpoints =>
{
    endpoints.MapDynamicControllerRoute<DemoRouteValueTransformer>("/");
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

注:MapDynamicControllerRoute 要放在 MapControllerRoute 之前,不然会走 MapControllerRoute 默认路由 /Home/Index

dudu | 高人七级 |园豆:30943 | 2022-02-11 14:54
其他回答(1)
-4

111111

收获园豆:30
何以清欢渡 | 园豆:10 (初学一级) | 2022-02-11 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册