我正在为两个业务组构建通用网络应用程序。 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/