2012-05-16 75 views
0

我正在使用SimpleMvcCaptcha。我的環境有不同的領域。我想在不同區域以不同形式使用此驗證碼。在MVC中從路由中刪除區域名稱

該模塊需要一個控制器,名稱爲驗證碼和一個方法。 如果我創建在同一地區該控制器是我使用它,那麼就沒有問題,但如果我在不同的環境下使用,我得到這個錯誤:

The controller for path '/AreaName/Captcha/GetImage/15fe4de1-fd46-4f2f-a0d1-74c397bd8365' could not be found. 

我怎樣才能解決這個問題?我想我能解決這個問題的方法是去除航線登記,如

routes.MapRoute(
      "Default_Captcha", 
      "AreaName/Captcha/{action}/{id}", 
      new { area = string.Empty, controller = "Captcha", action = "GetImage", id = UrlParameter.Optional }); 

的區域,但我仍然得到同樣的錯誤。

有沒有什麼辦法可以從鏈接中刪除區域名稱?

---更新

的驗證碼需要一個控制器,用於其操作(與用於獲取圖像驗證碼的一種方法的控制器)。

我想在MyArea中實現的表單中使用它。該表單涉及一個名爲MyController的控制器。

如果我在這個區域內創建了一個CaptchaController,其中包含所需的代碼,驗證碼效果很好(顯示Captcha圖像)。

現在假設我有另一個區域(MyArea2),並且在這個區域中,我有一個名爲MyController2的控制器,那麼我在這個區域也需要一個新的Captcha控制器,否則它不會顯示圖像。

我無法將CaptchaController移動到非區域代碼部分,因爲圖像未顯示。

的URL驗證碼圖像是(用於視圖相關myController的使用的驗證碼):

http://mySite/MyArea/Captcha/GetImage/xxxxxxxxxxxx 

的URL驗證碼圖像是(用於視圖相關MyController2使用的驗證碼):

http://mySite/MyArea2/Captcha/GetImage/xxxxxxxxxxxx 

如果我將驗證碼控制器移動到非區域部分,則上述url都不起作用,並且不顯示圖像。

如果我可以重新路由這些URL到以下網址,那麼他們應該工作(我可以在非區域劃一個驗證碼控制器):

http://mySite/Captcha/getImage/xxxxxxxxxxxxxxxxxxx 

我怎樣才能做到這一點?

回答

0

如果您的CaptchaController不是區域特定的,那麼它可能不應該在某個區域。如果您將其重命名並將其重命名爲Controllers主目錄,則它應該可以全局訪問。

如果由於某種原因您不想這樣做,那麼您可以註冊一個具有更高優先級的路線,該路線直接映射到全球位置的行動。你定義的路由的問題是它沒有指定控制器的區域作爲參數,但似乎只在url本身中這樣做。對我來說,調試路由有點困難,因爲(1)不清楚您是添加還是移除樣本路由,(2)我看不到在樣本路由之前或之後註冊了哪些路由, (3)AREANAME的模糊性是混亂的,因爲我們無法知道它是其中映射工作或不工作

+0

謝謝,請參閱我更新的區域。 – mans