我正在使用SimpleMvcCaptcha。我的环境有不同的领域。我想在不同的区域以不同的形式使用这个验证码。
这个模块需要一个名为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 });
但我仍然遇到同样的错误。
有什么方法可以从链接中删除区域名称吗?
---更新
Captcha需要一个控制器来操作(控制器有一种获取验证码图像的方法)。
我希望以MyArea中实现的形式使用它。该表单涉及一个名为MyController的控制器。
如果我在此区域内创建了一个CaptchaController,其中包含所需的代码,则验证码效果很好(显示验证码图像)。
现在假设我有另一个区域(MyArea2),在这个区域,我有一个名为MyController2的控制器,那么我在这个区域也需要一个新的Captcha控制器,否则,它不显示图像。
我无法将CaptchaController移动到非区域代码区域,因为不会显示图像。
Captcha图像的URL是(对于与MyController相关的视图中使用的Captcha):
http://mySite/MyArea/Captcha/GetImage/xxxxxxxxxxxx
Captcha图像的URL是(对于与MyController2相关的视图中使用的Captcha):
http://mySite/MyArea2/Captcha/GetImage/xxxxxxxxxxxx
如果我将验证码控制器移动到非区域部分,则上述网址都不起作用且不显示图像。
如果我可以将这些URL重新路由到以下URL,那么它们应该可以工作(我可以在非区域部分中有一个Captcha控制器):
http://mySite/Captcha/getImage/xxxxxxxxxxxxxxxxxxx
我该怎么做?
答案 0 :(得分:0)
如果您的CaptchaController不是特定区域的,那么它可能不应该在某个区域。如果您将其重新定位并重命名为主控制器目录,则它应该可以全局访问。
如果由于某种原因您不想这样做,那么您可以注册一个优先级更高的路由,该路由直接映射到全局位置的操作。您定义的路由的问题是它没有将控制器的区域指定为参数,但似乎只在url本身中这样做。虽然我调试你的路由有点困难,因为(1)不清楚你是在添加还是删除样本路由,(2)我看不到在样本路由之前或之后注册了哪些路由, (3)AreaName的模糊性令人困惑,因为我们无法判断它是映射有效还是无效的区域