次のコードを記述できるように、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 インスタンスのいずれかでハンドラーを起動させるには、私が何もしないようです。