[英]Custom routing asp.net mvc 3 issue
我希望在我的操作方法中,我的Request.Url.Host应该可用。 但是我不想在routedata中设置它,因为它将在url中对用户可见。 我如何才能做到这一点,以便Request.Url.Host在我的域名variabele中可用,但现在以url显示给用户? 我尝试将其添加到Request.Form.Add(“ domain”,Request.Url.Host),但因为Request.Form是只读集合,所以它不起作用。
例如:
public ActionResult Foo(string domain, int id) //id is the standard routedata that you get from url.
{
..//code
}
我能做的最好的是什么? 我不想在每个操作方法中都执行Request.Url.Host,所以我正在尝试这种方法。
我试图这样做:
public class MyRoute : Route
{
#region '----- Method(s) -----'
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{ }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData routeData = base.GetRouteData(httpContext);
string domain = httpContext.Request.Url.Host;
routeData.DataTokens["domain"] = domain;
return routeData;
}
#endregion
}
但是我的action方法中的domain变量为null。
谢谢。
编辑:完全重写:
您应该将自定义数据添加到routeData.Values
而不是routeData.DataTokens
。
public class MyRoute : Route
{
#region '----- Method(s) -----'
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{ }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData routeData = base.GetRouteData(httpContext);
string domain = httpContext.Request.Url.Host;
routeData.Values["domain"] = domain;
return routeData;
}
#endregion
}
并注册您的MyRoute
路由(MVC使用第一个匹配的路由,因此应该先走):
routes.Add(new MyRoute("{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.