2010-07-21 104 views
0

所以,我遇到了一個奇怪的問題,在我的應用程序中有一條路由。出於某種原因,它只是不匹配。它看起來像{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對我...

我非常沮喪。我已經寫了有更爲複雜的應用程序比這個簡單的職位/評論的應用程序,我從來沒有遇到了這麼多困難......

我只是不知道了......

::雲到一個角落,捲起,開始哭泣::

+0

如果您可以提供更詳細的關於如何添加路線,我們可以提供幫助。你是在說你在調用'Misc/Comments/Put'還是在路由映射詞典中放了'{controller}/Comments/Put'?如果是的話,給我們一些關於你如何在路由表中延遲它的細節。 – 2010-07-21 02:05:09

+0

我通過一個表單帖子調用'/ Misc/Comments/Put',它應該與'ControllerConstraint(「Misc」)'匹配'/ {controller}/Comments/Put'。它沒有。另一個類似的路由'/ Ajax/Posts/Put'可以正常工作,它也有一個'ControllerConstraint(「Ajax」)',所以它們沒有任何衝突。希望能多一點幫助。 – Gup3rSuR4c 2010-07-21 02:11:21

回答

0

好的,所以我想通了,但我認爲,但無論哪種方式現在的作品。

我的第一個錯誤是我壓制了來自數據庫的錯誤。這個動作已經被調用,但是崩潰並且抑制了數據庫錯誤,所以從我的角度來看,我認爲這個動作並沒有被調用,因爲我從來沒有看到數據的變化。

我的第二個錯誤是我沒有正確重定向,或者特別是我沒有爲重定向指定控制器。反過來,重定向試圖重定向到同一控制器中不存在的操作。

但是我做到了,這是它得到一個矛盾的地方,幾次得到一個HttpVerb異常。我只能假設我正在調用原始操作,然後重定向到現有操作,但重定向保留了HttpVerb,從而導致第二個操作發生異常。然而,這似乎仍然是一個BS解釋,可能是錯誤的,但這是我能理解它的最好方法。最後,我注意到如果爲控制器A配置了一個路由,但該操作實際上在控制器B中,那麼您將會看到一個異常,看起來它正在處理一個「操作」但失敗了。換句話說,當你真的不在時,它會誤導你認爲你正在進行一項行動。

無論如何,希望這有助於未來的人。