我希望在我的操作方法中,我的 Request.Url.Host 应该可用。但是我不想在 routedata 中设置它,因为它在 url 中对用户可见。我怎样才能做到这一点,以便 Request.Url.Host 在我的域名变量中可用,但现在在 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
}
但是我的操作方法中的域变量为空。
谢谢。
最佳答案
编辑:完全重写:
您应该将自定义数据添加到 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 }));
关于c# - 自定义路由 asp.net mvc 3 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7802627/