Asp.net mvc 在MVC中从管线中删除区域名称

Asp.net mvc 在MVC中从管线中删除区域名称,asp.net-mvc,routes,captcha,Asp.net Mvc,Routes,Captcha,我正在使用SimpleMvcCaptcha。我的环境有不同的领域。我想在不同的区域使用不同形式的验证码 该模块需要一个名为say Captcha的控制器和其中的一个方法。 如果我在使用该控制器的同一区域创建该控制器,则没有问题,但如果我在不同区域使用该控制器,则会出现以下错误: The controller for path '/AreaName/Captcha/GetImage/15fe4de1-fd46-4f2f-a0d1-74c397bd8365' could not be found.

我正在使用SimpleMvcCaptcha。我的环境有不同的领域。我想在不同的区域使用不同形式的验证码

该模块需要一个名为say Captcha的控制器和其中的一个方法。 如果我在使用该控制器的同一区域创建该控制器,则没有问题,但如果我在不同区域使用该控制器,则会出现以下错误:

 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相关的视图中使用的验证码):

验证码图像的URL是(对于与MyController2相关的视图中使用的验证码):

如果我将captcha控制器移动到非区域部分,则上面的url都不起作用,也不会显示任何图像

如果我可以将这些URL重新路由到以下URL,那么它们应该可以工作(我可以在非区域部分使用一个验证码控制器):


我该怎么做呢?

如果您的CaptchaController不是特定于区域的,那么它可能不应该位于某个区域。如果将其重新定位并重命名到主控制器目录,则该目录应可全局访问

如果出于某种原因您不想这样做,那么您可以注册一个具有更高优先级的路由,该路由从全局位置直接映射到您的操作。您定义的路由的问题在于,它没有将控制器的区域指定为参数,而只是在url本身中这样做。不过,调试您的路由对我来说有点困难,因为(1)不清楚您是在添加还是删除示例路由,(2)我看不到在示例路由之前还是之后注册了哪些路由,(3)AreaName的模糊性令人困惑,因为我们无法分辨映射是否在该区域工作

http://mySite/MyArea/Captcha/GetImage/xxxxxxxxxxxx
http://mySite/MyArea2/Captcha/GetImage/xxxxxxxxxxxx
 http://mySite/Captcha/getImage/xxxxxxxxxxxxxxxxxxx