在子域路由约束中,我想通过下面的代码将子域名传递给控制器。但是在控制器子域中缺少条目(仅存在操作和控制器条目)。这有什么不对?或者我应该在控制器本身中嗅探子域(在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;
}
}
答案 0 :(得分:1)
我认为你以错误的方式解释values
参数。根据MSDN,它是包含URL 参数的对象。所以我不确定它是否与控制器中的RouteDataDictionary相同。
获取子域的最简单方法是从控制器中获取Request.Url.Host。
答案 1 :(得分: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;
}
}