簡體   English   中英

自定義路由ASP.NET MVC 3問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM