将自定义查询参数添加到ASP.NET Core MVC中的操作URL

时间:2017-06-13 14:57:07

标签: asp.net-core asp.net-core-mvc url-routing query-parameters

在ASP.NET Core MVC中,我想使用Url.Action创建的URL和基于操作的标记帮助程序在URL中包含自定义查询参数。无论控制器或操作如何,我都希望全局应用它。

我尝试了overriding the default route handler,它曾一度工作,但打破了ASP.NET核心更新。我究竟做错了什么?还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

尝试将其添加到集合中,而不是覆盖DefaultHandler。以下版本适用于版本1.1.2:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // ... other configuration
    app.UseMvc(routes =>
    {
        routes.Routes.Add(new HostPropagationRouter(routes.DefaultHandler));
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    // ... other configuration
}

这是路由器,只是为了完整性。

public class HostPropagationRouter : IRouter
{
    readonly IRouter router;

    public HostPropagationRouter(IRouter router)
    {
        this.router = router;
    }

    public VirtualPathData GetVirtualPath(VirtualPathContext context)
    {
        if (context.HttpContext.Request.Query.TryGetValue("host", out var host))
            context.Values["host"] = host;
        return router.GetVirtualPath(context);
    }

    public Task RouteAsync(RouteContext context) => router.RouteAsync(context);
}