0

在子域路由约束中,我想使用下面的代码将子域名传递给控制器​​。但是在控制器子域条目中缺少(仅存在操作和控制器条目)。这里有什么问题?或者我应该在控制器本身中嗅探子域(在 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;
    }
}
4

2 回答 2

1

我认为您以values错误的方式解释了论点。根据 MSDN,它是一个包含 URL 参数的对象。所以我不确定它是否与您在控制器中获得的 RouteDataDictionary 相同。

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

于 2012-05-09T20:16:36.073 回答
0

好吧,我改变了我的路由约束实现。我没有实现 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;
    }
}
于 2012-05-14T14:02:14.763 回答