自定义路由asp.net mvc 3问题

本文关键字:问题 mvc net 路由 asp 自定义 | 更新日期: 2023-09-27 18:11:45

我希望在我的action方法中,我的Request.Url.Host应该是可用的。然而,我不想在routedata中设置它,因为它将在url中对用户可见。如何才能使Request.Url.Host在我的域名变量中可用,但现在以url显示给用户?我尝试将其添加到Request. form . add("域",Request. url . host),但由于请求,它不起作用。表单是只读集合

,

public ActionResult Foo(string domain, int id) //id is the standard routedata that you get from url.
{
    ..//code
}

我能做的最好的是什么?我不想在每个action方法中都使用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方法中是null

谢谢。

自定义路由asp.net mvc 3问题

编辑:完全重写:

您应该将您的自定义数据添加到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 }));