asp.net-mvc - HttpHandler 永远不会被调用

标签 asp.net-mvc captcha httphandler

我有一个 MVC 应用程序,我正在尝试将 ManagedFusion.Web.Captcha.CaptchaImageHandler 添加到其中,以便我可以编写以下代码:

<label for="captcha">Enter @Html.Raw(Business.Captcha.CaptchaImage(Html, 50, 180))  Below</label>

并让图像出现。该类的代码只是从在线示例中剪切并粘贴:

public static string CaptchaImage(this HtmlHelper helper, int height, int width) {
            ManagedFusion.Web.Controls.CaptchaImage image = new ManagedFusion.Web.Controls.CaptchaImage {
                Height = height,
                Width = width,
            };
            HttpRuntime.Cache.Add(image.UniqueId, image,
                null,
                DateTime.Now.AddSeconds(ManagedFusion.Web.Controls.CaptchaImage.CacheTimeOut),
                Cache.NoSlidingExpiration,
                CacheItemPriority.NotRemovable,
                null);
            StringBuilder stringBuilder = new StringBuilder(256);
            stringBuilder.Append("<input type=\"hidden\" name=\"captcha-guid\" value=\"");
            stringBuilder.Append(image.UniqueId);
            stringBuilder.Append("\" />");
            stringBuilder.AppendLine();
            stringBuilder.Append("<img src=\"");
            stringBuilder.Append("/captcha.ashx?guid=" + image.UniqueId);
            stringBuilder.Append("\" alt=\"CAPTCHA\" width=\"");
            stringBuilder.Append(width);
            stringBuilder.Append("\" height=\"");
            stringBuilder.Append(height);
            stringBuilder.Append("\" />");
            return stringBuilder.ToString();
        }

我已将以下内容添加到我的 web.config

<system.web>

<httpHandlers>
  <add  verb="GET" path="test.sample"  type="ManagedFusion.Web.Handlers.CaptchaImageHandler, ManagedFusion.Web.Captcha" validate="false" />
</httpHandlers>
</system.web>

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" >

</modules>
<handlers>
  <add name="CaptchaImageHandler" verb="GET" path="captcha.ashx"  type="ManagedFusion.Web.Handlers.CaptchaImageHandler, ManagedFusion.Web.Captcha" />
</handlers>

所有以前的SO问题都指向system.web->httpHandlers被Cassini拾取,而system.webServer->handlers被IIS 7拾取。但是每当我导航到具有上述代码的 View 时,我/captcha.ashx 总是得到 404。 global.asax 中没有路由忽略规则。这里发生了什么?就像我所做的任何事情都无法让处理程序在我的本地计算机或已部署的 IIS 7 实例上触发。

最佳答案

在 Global.asax 文件中,我需要在默认路由映射之前添加忽略路由,因此整个方法如下所示:

public static void RegisterRoutes(RouteCollection routes) {
        routes.Ignore("captcha.ashx");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

关于asp.net-mvc - HttpHandler 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369362/

相关文章:

asp.net-mvc - MVC 应用程序中的 Google OAuth 访问 token 过期?

asp.net - 如何使用 HTTP Handler 传递 http 调用

asp.net-mvc - 使用 MVC 动态分配母版页

c# - 显示月份名称的 DataAnnotation

php - Zend_Form_Element_Captcha 异常问题...?

python - Scrapy & 验证码

iis - HTTP 错误 500.23 - 内部服务器错误本地 IIS Web 服务器

c# - 如何在 IIS 7 中配置 Http 处理程序?

asp.net-mvc - 如何在单个页面中使用两个 AntiForgeryToken 而不使用已弃用的 'Salt' 属性

javascript - 查找 reCAPTCHA 何时重新加载