【发布时间】:2011-03-18 18:25:48
【问题描述】:
所以,我的应用程序中的路由遇到了一个奇怪的问题。由于某种原因,它只是不匹配。它看起来像{controller}/Comments/Put,并且它具有相应的约束以确保它进入正确的控制器,在本例中为“Misc”。当我发布到路线时,它只是不匹配......
我插入了 RouteDebugger 库,它说“不匹配!”,但是,当我查看路由表时,正在出错的路由在“匹配”列下有一个绿色的“真”,所以我米略有损失。怎么能同时匹配又不匹配呢?
我已经注释掉了应用程序的所有其他路由,但我仍然得到相同的结果。
它确实起作用的一次是当我将路线更改为愚蠢的长时,但随后我收到另一个错误,说我无法发布到该操作,这是因为它装饰有[HttpPut],但是,我将 HttpMethodOverride 作为帖子的一部分...无论如何,这是另一个愚蠢的错误,甚至不应该发生,但话又说回来,这可以说是所有错误。
如果这有什么不同,它不应该...,但需要调用的操作是 RedirectToRouteResult 操作。
编辑:我也尝试将路线放在列表的最顶部,以便首先调用它,但仍然没有变化......
无论如何,如果有人能指出路线失败的原因,我将不胜感激!
提前致谢!
编辑 2:为了澄清一点,该应用程序本质上是用于发布短消息,然后对这些消息进行评论。
通过路由Ajax/Post/Put 匹配{controller}/Post/Put 的Ajax 控制器可以正常发布消息。您可能会注意到这些路线非常相似,但它们并不相互冲突。每条路由都有一个controller = new ControllerConstraint("Ajax")或controller = new ControllerConstraint("Misc")形式的控制器约束。
编辑 3: 再次澄清一点,这里是应该调用的控制器/动作和 Global.asax 中的路由:
MiscController : BaseController {
[HttpPut, ValidateAntiForgeryToken]
public RedirectToRouteResult PutComment(
[Bind(Prefix = "Comment", Include = "Text")] Comment Comment) {
// Do stuff...
}
}
Routes.MapRoute("Misc (Put Comment)", "{controller}/Comments/Put", new {
action = "PutComment"
}, new {
controller = new ControllerConstraint("Misc")
});
编辑 4:硬写如下路线没有效果:
Routes.MapRoute("Misc (Put Comment)", "Misc/Comments/Put", new {
controller = "Misc",
action = "PutComment"
});
编辑 5: 我已经完成并简化了所有路线,网址中没有更多参数,也没有更多限制。所以,路线看起来像:
Routes.MapRoute("Misc (Comments)", "Misc/Comments", new {
controller = "Misc",
action = "Comments"
});
所以,既然路线是完全硬编码的,那么在没有匹配路线的情况下应该不会有任何差异。简单明了……或者是……
在尝试之后,它有点工作,我现在对不允许 POST 大喊大叫,这是真的,因为操作被 PUT 装饰,但是,Http 覆盖正在按应有的方式发送,但是框架完全忽略了它(?)。
所以,继续前进,我决定重试完全相同的发布尝试,但这次启用路由调试器给了我以下信息:路由仍然不匹配,但在路由表中,它以绿色列为匹配。矛盾的**!!!
因此,吞下另一个 BS 错误,我决定禁用所有其他路由以及所有其他控制器的所有其他方法。
猜猜看,我仍然得到相同的结果!就好像这个框架对我来说完全是 SUPER MEGA HERP-A-DE-DERP...
我非常沮丧。我编写的应用程序比这个简单的帖子/评论应用程序复杂得多,而且我从未遇到过这么多困难......
我只是不知道了......
::走到角落,蜷缩起来开始哭泣::
【问题讨论】:
-
如果您能提供更详细的关于如何添加路线的信息,我们可以提供帮助。你是说你打电话给
Misc/Comments/Put还是你把{controller}/Comments/Put放在路由映射字典中?如果是这样,请告诉我们您如何在路由表中删除它。 -
我正在通过一个表单帖子致电
/Misc/Comments/Put,该表单帖子应与/{controller}/Comments/Put和ControllerConstraint("Misc")匹配。它没有。另一条类似的路线,/Ajax/Posts/Put工作正常,它也有一个ControllerConstraint("Ajax"),所以它们不可能冲突。希望对您有所帮助。
标签: c# asp.net-mvc-2 routes