从MVC中的路由中删除区域名称

时间:2012-05-16 10:54:38

标签: asp.net-mvc routes captcha

我正在使用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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

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