我正在尝试在我现有的MVC5应用程序中实现一些域名逻辑。我遇到的问题是,如果我尝试使用Route中的自定义子类,它不会尊重Namespaces字段并抛出错误,因为我有2个不同的用户控制器。
作为一个控件,这非常好用:
routes.MapRoute("Login",
"login/",
new { controller = "User", action = "Login" },
new[] { "Quotes.Web.Controllers" });
我的DomainRoute类继承自Route,只添加一个Domain属性。这是相关的构造函数:
public DomainRoute(string domain, string url, object defaults, string[] namespaces = null)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{
Domain = domain;
DataTokens = new RouteValueDictionary {["Namespaces"] = namespaces};
}
我将其注册为:
var loginRoute = new DomainRoute(
domain,
"login/",
new { controller = "User", action = "Login" },
new[] { "Quotes.Web.Controllers" });
routes.Add("Login", loginRoute);
DataTokens在工作版本和我的破碎版本之间看起来相同,但它似乎忽略了我的DomainRoute有一个命名空间条目的事实
找到了与名为“User”的控制器匹配的多个类型。如果为此请求提供服务的路由('login /')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。
我错过了什么?
答案 0 :(得分:1)
我认为,this会帮助你,我有同样的问题,通过添加以下代码解决了这个问题
var dataTokens = new RouteValueDictionary();
var ns = new string[] {"MyProject.Controllers"};
dataTokens["Namespaces"] = ns;
routes.Add("Default", new CultureRoute(
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
null /*constraints*/,
dataTokens
));
答案 1 :(得分:0)
我用我在这里找到的改进版本切换了我的DomainRoute类:https://gist.github.com/IDisposable/77f11c6f7693f9d181bb
现在我的路线创建只是:
var clientRoutes = new DomainRouteCollection("mydomain",
"Quotes.Web.Controllers",
routes);
clientRoutes.MapRoute("Login", "login/", new { controller = "User", action = "Login" });
......更简洁,更重要的是,它有效。