Asp.net MVC 3全球查询?

Sta*_*Cub 3 asp.net asp.net-mvc routing query-string

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

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

The*_*ing 6

您可以编写Custom Routing Handler并使用路由来提取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;
    }
}
Run Code Online (Sandbox Code Playgroud)

注册如下:

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

获取路由数据的徽标:

var logo = RouteData.DataTokens["bg"];
Run Code Online (Sandbox Code Playgroud)