Asp.net MVC 3 全局查询字符串?

标签 asp.net asp.net-mvc routing query-string

我正在为两个业务组构建通用网络应用程序。 Logo /横幅需要根据查询字符串进行更改。例如,如果 url 是 http://foo.com/test?bg=a 它显示业务组 a 的 Logo ,如果 url 是 http://foo.com/test?bg=b 它显示业务组 b 的 Logo 。如果我只有一个 Action ,这不是问题。但是我有很多 Action 。

我可以检查所有操作的查询字符串,但必须有一个很好的方法来做到这一点。我有一种感觉,我需要对路由的东西做点什么,但不知道怎么做。谁能告诉我该怎么做?

最佳答案

可以写一个Custom Routing Handler,使用routing提取querystring作为参数,传入RouteData中即可随处访问。

public class RouteWithQueryStringValueHandler : MvcRouteHandler
{
    private readonly string key;

    public RouteWithQueryStringValueHandler(string key)
        : base()
    {
        this.key = key;
    }

    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        var request = requestContext.HttpContext.Request;
        var qsValue = requestContext.HttpContext.Request[key];
        var router = base.GetHttpHandler(requestContext);
        requestContext.RouteData.DataTokens[key] = qsValue;
        return router;
    }
}

注册如下:

routes.Add(new Route("{controller}/{action}/{id}", 
                 new RouteValueDictionary(
                         new { controller = "Home", 
                               action = "Index",
                               id = UrlParameter.Optional 
                         }),
                 new RouteWithQueryStringValueHandler("bg")));

获取路由数据的标识:

var logo = RouteData.DataTokens["bg"];

关于Asp.net MVC 3 全局查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7355003/

相关文章:

c# - 如何重新生成 EDMX 文件?

asp.net-mvc - 无法找到 IdentityServer4 的 DiscoveryClient

routing - 启用推送状态和上下文路径路由 : Static assets are not found on the server

c# - 无法加载类型 'AjaxControlToolkit.Sanitizer.AntiXssSanitizerProvider'。

c# - 是否有将阿拉伯语 html 转换为 pdf 的免费组件?

c# - 事件目录 + HTTP 身份验证

c# - 在 MVC 中从同步调用异步而没有等待时,TPL 任务死锁

ruby-on-rails - RESTful 身份验证 : Stumped trying to do simple redirect on cookie based authentication

node.js - 根据版本号动态路由

c# - 如何在 asp.net 中为 "in development"网站开发手机应用程序后端