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的徽标.如果我只有一个动作,这不是问题.但我有很多行动.
我可以检查所有操作的查询字符串,但必须有一个很好的方法来做到这一点.我有一种感觉,我需要做一些路由的东西,但只是不知道如何.谁能告诉我怎么做?
您可以编写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)