Asp.net mvc 3 正在将子域信息传递给IRouteConstraint.Match中的控制器

Asp.net mvc 3 正在将子域信息传递给IRouteConstraint.Match中的控制器,asp.net-mvc-3,routes,subdomain,Asp.net Mvc 3,Routes,Subdomain,在子域路由约束中,我想用下面的代码将子域名传递给控制器。但在控制器中缺少子域条目(仅存在操作和控制器条目)。这里怎么了?或者我应该嗅探控制器本身的子域(借助Request.Headers[“HOST”])?最佳做法是什么 public class SubdomainRouting : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, Ro

在子域路由约束中,我想用下面的代码将子域名传递给控制器。但在控制器中缺少子域条目(仅存在操作和控制器条目)。这里怎么了?或者我应该嗅探控制器本身的子域(借助Request.Headers[“HOST”])?最佳做法是什么

public class SubdomainRouting : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        //
        //get subdomain here
        //

        if (values.ContainsKey("subdomain") == false)
        {
            values.Add("subdomain", subdomain);
        }
        return true;
    }
}

我认为您对
值的解释是错误的。根据MSDN,它是一个包含URL参数的对象。所以我不确定它是否和你在控制器里看到的一样


获取子域的最简单方法是从控制器中的Request.Url.Host获取。

我更改了路由约束实现。我没有实现IRouteConstraint,而是实现了RouteBase。通过这种方式,我可以添加路线值:

public class SubdomainRoute : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        RouteData returnValue = null;

        //some code here 

        returnValue = new RouteData(this, new MvcRouteHandler());
        returnValue.Values.Add("controller", "SomeController");
        returnValue.Values.Add("action", "SomeAction");
        returnValue.Values.Add("key", some_value_to_pass_to_controller);

        //some code here

        return returnValue;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }
}

您能展示一下在RegisterRoutes中映射路由时如何使用SubdomainRoute类吗?谢谢