我使用IRouterProvider根据this thread中的建议从属性路由创建路由描述。将调用路由器提供程序并获取路由。
我通过使用Url.Action助手方法为这些特定的操作生成链接,并且为定制路由生成urls,就像预期的那样。然而,当这样的链接被导航时,控制器不会被调用。我得到了404。果园甚至不在游戏中。
我的路由提供者看起来是:
public IEnumerable<RouteDescriptor> GetRoutes()
{
var type = typeof(ShoppingCartController);
foreach (var meth in type.GetMethods())
{
var attr = meth.GetCustomAttribute<System.Web.Mvc.RouteAttribute>();
if (attr != null)
{
yield return new RouteDescriptor
{
Priority = 100,
Name = string.Format("ShoppingCart{0}Route", meth.Name),
SessionState = System.Web.SessionState.SessionStateBehavior.Required,
Route = new Route(attr.Template,
new RouteValueDictionary
{
{ "area", "XXXX.Features" },
{ "controller", "ShoppingCart" },
{ "action", meth.Name }
},
new RouteValueDictionary(),
new RouteValueDictionary
{
{ "area", "XXXX.Features" }
},
new MvcRouteHandler())
};
}
}
}我的控制器方法签名是:
[Themed]
[Route("cart/checkout")]
public ActionResult CheckOut() {...}我试着调试这个问题,但我甚至不知道从哪里开始。我对果园很陌生。
提前感谢
发布于 2015-03-30 12:25:03
路由提供程序中的代码似乎没有问题。有几件事你可以检查:
RouteAttribute的情况下对同一条路径进行硬编码,并查看这条路径是否通过。如果是这样的话,那么属性本身就会因为某种原因而造成混乱,最好的选择是模仿属性类,并使用这个类来修饰操作。area参数是正确的,并且等于控制器所在的模块(而不是功能)名称(即。模块项目名称)。int.MaxValue,以确保它不会被其他路由劫持Name属性和/或确保它确实是唯一的
https://stackoverflow.com/questions/29296528
复制相似问题