3

次のコードを記述できるように、ManagedFusion.Web.Captcha.CaptchaImageHandler を追加しようとしている MVC アプリケーションがあります。

<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 によって取得されることを示しています。しかし、前述のコードを含むビューに移動するたびに、常に/captcha.ashx の 404。global.asax にはルート無視ルールはありません。ここで何が起こっているのですか?ローカル マシンまたはデプロイされた IIS 7 インスタンスのいずれかでハンドラーを起動させるには、私が何もしないようです。

4

1 に答える 1

4

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
        );
    }
于 2012-07-09T14:34:49.300 に答える