Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义路由asp.net mvc 3问题_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

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

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

我希望在我的操作方法中,我的Request.Url.Host应该可用。但是,我不想在routedata中设置它,因为用户可以在url中看到它。如何实现这一点,使Request.Url.Host在我的域名variabele中可用,但现在在Url中显示给用户?我尝试将它添加到Request.Form.Add(“domain”,Request.Url.Host)中,但它不起作用,因为Request.Form是只读集合

例如:

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


谢谢

编辑:完成重写:

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