0

我正在使用 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 重新路由到以下 URL,那么它们应该可以工作(我可以在非区域部分有一个 Captcha 控制器):

 http://mySite/Captcha/getImage/xxxxxxxxxxxxxxxxxxx

我怎样才能做到这一点?

4

1 回答 1

0

如果您的 CaptchaController 不是特定于区域的,那么它可能不应该在一个区域中。如果您将其重新定位并重命名空间到主 Controllers 目录,它应该可以全局访问。

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

于 2012-05-16T22:56:01.230 回答