/ / Usuwanie nazwy obszaru z trasy w MVC - asp.net-mvc, trasy, captcha

Usuwanie nazwy obszaru z trasy w MVC - asp.net-mvc, trasy, captcha

Używam SimpleMvcCaptcha. Moje otoczenie ma różne obszary. Chcę używać tego captcha w różnych formach na różnych obszarach.

Ten moduł wymaga kontrolera o nazwiepowiedzmy Captcha i jedną z metod. Jeśli utworzę ten kontroler w tym samym obszarze, w którym go używam, to nie ma problemu, ale jeśli używam go w różnych obszarach, otrzymuję ten błąd:

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

Jak mogę rozwiązać ten problem? Jednym ze sposobów, w jaki mogę rozwiązać ten problem, jest usunięcie obszaru w trakcie rejestracji trasy, takiego jak

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

Ale wciąż mam ten sam błąd.

Czy istnieje sposób na usunięcie nazwy obszaru z linku?

--- Aktualizacja

Captcha potrzebuje kontrolera do działania (kontroler z jedną metodą uzyskiwania obrazu captcha).

Chcę go użyć w formie zaimplementowanej w MyArea. Formularz odnosi się do kontrolera o nazwie MyController.

Jeśli utworzę CaptchaController w tym obszarze z wymaganym wewnątrz kodem, captcha działa dobrze (obraz Captcha jest pokazany).

Załóżmy teraz, że mam inny obszar (MyArea2) iw tym obszarze mam kontroler o nazwie MyController2, w tym obszarze potrzebuję też nowego kontrolera Captcha, w przeciwnym razie nie wyświetli obrazu.

Nie mogę przenieść CaptchaController do sekcji kodu bez obszaru, ponieważ obraz nie jest wyświetlany.

Adres URL obrazu Captcha (dla Captcha używanego w widoku powiązanym z MyController):

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

Adres URL obrazu Captcha (dla Captcha używanego w widoku związanym z MyController2):

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

Jeśli przeniesię kontroler captcha do sekcji bez obszaru, wówczas żaden z powyższych adresów URL nie zadziała i nie zostanie wyświetlony żaden obraz.

Jeśli mogę ponownie skierować te adresy URL pod następujący adres URL, powinny one działać (mogę mieć jednego kontrolera Captcha w sekcji bez obszaru):

 http://mySite/Captcha/getImage/xxxxxxxxxxxxxxxxxxx

Jak mogę to zrobić?

Odpowiedzi:

0 dla odpowiedzi № 1

Jeśli twój CaptchaController nie jest specyficzny dla obszaru, prawdopodobnie nie powinien znajdować się w obszarze.Jeśli przeniesiesz i zmienisz nazwę do głównego katalogu Controllers, powinien on stać się globalnie dostępny.

Jeśli z jakiegoś powodu nie chcesz tego zrobić,możesz zarejestrować trasę o wyższym priorytecie, która jest mapowana bezpośrednio do Twojego działania z lokalizacji globalnej. Problem z trasą, którą zdefiniowałeś, polega na tym, że nie określa ona obszaru kontrolera jako parametru, ale wydaje się, że tylko w adresie URL. Trochę trudno mi debugować trasę, ponieważ (1) nie jest jasne, czy dodajesz lub usuwasz próbną trasę, (2) nie widzę, jakie trasy są rejestrowane przed lub po próbnej trasie, (3) niejednoznaczność AreaName jest myląca, ponieważ nie możemy stwierdzić, czy jest to obszar, w którym mapowanie działa lub nie działa