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

标签 c# asp.net-mvc asp.net-mvc-3

我希望在我的操作方法中,我的 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/

相关文章:

javascript - 在 Javascript 中使用这些 MVC URL 的正确方法

c# - Microsoft.EntityFrameworkCore.Design 未安装

c# - IdentityServer 教程, token 具有无效签名

c# - 将 Web 上下文传递给 ASP MVC 应用程序中的 'service'

c# - 如何在 Javascript 中比较来自 C# Viewbag 的值?

c# - 为什么 "Session_end"不起作用?

c# - MVC 5 : Should I inherit my User from IdentityUser class?

c# - WPF 数据网格 : Clear column sorting

asp.net - 我正在为我的 ASP.NET MVC 应用程序寻找分布式数据/对象缓存

c# - MVC Web 应用程序无法识别自定义类