C# 自定义路由asp.net mvc 3问题
我希望在我的操作方法中,我的Request.Url.Host应该可用。但是,我不想在routedata中设置它,因为用户可以在url中看到它。如何实现这一点,使Request.Url.Host在我的域名variabele中可用,但现在在Url中显示给用户?我尝试将它添加到Request.Form.Add(“domain”,Request.Url.Host)中,但它不起作用,因为Request.Form是只读集合 例如: 我能做的最好的是什么?我不想在每个操作方法中都使用Request.Url.Host,所以我正在尝试这种方法 我试着这样做:C# 自定义路由asp.net mvc 3问题,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我希望在我的操作方法中,我的Request.Url.Host应该可用。但是,我不想在routedata中设置它,因为用户可以在url中看到它。如何实现这一点,使Request.Url.Host在我的域名variabele中可用,但现在在Url中显示给用户?我尝试将它添加到Request.Form.Add(“domain”,Request.Url.Host)中,但它不起作用,因为Request.Form是只读集合 例如: 我能做的最好的是什么?我不想在每个操作方法中都使用Request.Url.H
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方法中的域变量为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
route(MVC使用第一个匹配的路由,所以它应该先进行):
为什么你想让
域成为url的一部分?@Jaggu看到我重写的答案。非常感谢!!!!工作得很漂亮!我从过去两个小时就一直在和这个问题做斗争,但是你解决了我的问题。我基本上把路线画错了。添加线。我不知道你可以设置随机路由数据而不需要那个键作为url的一部分。
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
}
routes.Add(new MyRoute("{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));