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 № 1Jeś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