所以,我遇到了一個奇怪的問題,在我的應用程序中有一條路由。出於某種原因,它只是不匹配。它看起來像{controller}/Comments/Put
,它有相應的限制,以確保它進入正確的控制器,在這種情況下,「雜項」。當我張貼到路線,它只是不匹配...MVC 2路由問題(bug?)
我插入RouteDebugger庫,它說:「不匹配!」,但是,當我看着路線表,在「匹配」欄下有一個綠色的「真實」,所以我略有損失。它如何匹配並且不能同時匹配?
我已經儘可能爲應用程序註釋掉所有其他路線,我仍然得到相同的結果。
有一次,它的工作是當我改變了一些愚蠢的路線,但後來我得到了另一個錯誤,說我不能張貼到行動,這是因爲它用[HttpPut]
裝飾,但是,我將HttpMethodOverride作爲帖子的一部分......無論如何,這是另一個愚蠢的錯誤,甚至不應該發生,但是再次,這可以說是所有錯誤。
Idk如果這有什麼區別,它不應該......,但需要調用的操作是一個RedirectToRouteResult操作。
編輯:我也試圖把路線列表的最頂端,因此獲得的第一個叫,仍然沒有改變...
無論如何,如果有人可以點我,爲什麼路線失敗了,我真的很感激它!
提前致謝!
編輯2:爲了澄清一點,該應用程序本質上是發佈短消息,然後評論這些消息。
發佈消息通過Ajax控制器正常工作,路由爲Ajax/Post/Put
,與{controller}/Post/Put
匹配。您可能會注意到路線非常相似,但它們並不相互衝突。每條路線都有一個控制器約束,形式爲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:我已經經歷了並簡化了所有的路線,在烏拉圭回合沒有更多的PARAMS我沒有更多的限制。所以,路線如下:
Routes.MapRoute("Misc (Comments)", "Misc/Comments", new {
controller = "Misc",
action = "Comments"
});
所以,現在路線是完全硬編碼的,應該沒有關於沒有匹配路線的差異。平原和簡單...或是它...
試過後,它有點工作,我現在越來越大吼,在該POST是不允許的,這是真的,因爲動作是用PUT裝飾,但是, Http覆蓋被髮送,因爲它應該有,但框架完全忽略它(?)。
因此,我決定重試完全相同的發佈嘗試,但這次啓用路由調試器給了我以下信息:路由仍然不匹配,路由表中的YET,它以綠色列出爲匹配。矛盾的a ** !!!
因此,吞嚥又一個BS錯誤,我決定禁用所有其他控制器的其他路由以及其他方法。
猜猜看,我仍然得到相同的結果!這就好像框架完全超越我的HERP-A-DE-DERP對我...
我非常沮喪。我已經寫了有更爲複雜的應用程序比這個簡單的職位/評論的應用程序,我從來沒有遇到了這麼多困難......
我只是不知道了......
::雲到一個角落,捲起,開始哭泣::
如果您可以提供更詳細的關於如何添加路線,我們可以提供幫助。你是在說你在調用'Misc/Comments/Put'還是在路由映射詞典中放了'{controller}/Comments/Put'?如果是的話,給我們一些關於你如何在路由表中延遲它的細節。 – 2010-07-21 02:05:09
我通過一個表單帖子調用'/ Misc/Comments/Put',它應該與'ControllerConstraint(「Misc」)'匹配'/ {controller}/Comments/Put'。它沒有。另一個類似的路由'/ Ajax/Posts/Put'可以正常工作,它也有一個'ControllerConstraint(「Ajax」)',所以它們沒有任何衝突。希望能多一點幫助。 – Gup3rSuR4c 2010-07-21 02:11:21