2010-08-26 92 views
0

我跟随本教程中的MVC应用程序中使用验证码: http://coderjournal.com/2008/03/actionfilterattribute-aspnet-mvc-captcha/ASP.NET MVC自定义的HttpHandler

我认为这是为了ealry ASP.NET MVC的版本,因为它doenst为我工作。

问题是验证码图像从不显示,导致自定义处理程序(captcha.ashx)从未获取请求。

在web.config中:

<httpHandlers> 
      <remove verb="*" path="*.asmx"/> 
      <add verb="GET" validate="false" path="captcha.ashx" type="SCE.Models.Helpers.Captcha.CaptchaHandler"/> 
     </httpHandlers> 

的处理程序:

namespace SCE.Models.Helpers.Captcha 
{ 
    public class CaptchaHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get { return true; } 
     } 
     public void ProcessRequest(HttpContext context) 
     { 
      string guid = context.Request.QueryString["guid"]; 
      CaptchaImage ci = CaptchaImage.GetCachedCaptcha(guid); 

      if (String.IsNullOrEmpty(guid) || ci == null) 
      { 
       context.Response.StatusCode = 404; 
       context.Response.StatusDescription = "Not found"; 
       context.ApplicationInstance.CompleteRequest(); 
       return; 
      } 

      using (Bitmap b = ci.RenderImage()) 
      { 
       b.Save(context.Response.OutputStream, ImageFormat.Gif); 
      } 
      context.Response.ContentType = "image/png"; 
      context.Response.StatusCode = 200; 
      context.Response.StatusDescription = "OK"; 
      context.ApplicationInstance.CompleteRequest(); 
     } 
    } 
} 

这似乎MVC的新版本已经改变了他们路由处理,但我不知道究竟是什么?

任何想法调用处理程序?

UPDATE: 这里找到了解决办法IVE: 在Global.asax文件:

routes.IgnoreRoute("{filename}.ashx/{*pathInfo}"); 
+0

您链接到了ASP.NET MVC预览1或2。你甚至都不需要为这个自定义HTTP处理程序编写的代码。你只是想在你的ASP.NET MVC网站中使用CAPTCHA吗? – bzlm 2010-08-26 21:50:43

+0

[如何在asp.net mvc中使用验证码](http://stackoverflow.com/questions/2286688/how-to-use-captcha-in-asp-net-mvc) – bzlm 2010-08-26 21:51:52

+0

yes captcha in mvc。 ..但不recaptcha – ozsenegal 2010-08-26 21:54:37

回答

1

使用MVC 2,验证码,这是一个非常优雅的解决方案。恕我直言

http://devlicio.us/blogs/derik_whittaker/archive/2008/12/02/using-recaptcha-with-asp-net-mvc.aspx

+0

对不起,我不能使用recaptcha,因为我已经尝试,它可以为我工作 – ozsenegal 2010-08-26 21:55:33

+0

您可以将这个相同的实现方法移植到您正在使用的任何验证码。我个人很喜欢用简单的captcha属性来装饰我的动作。 – 2010-08-26 22:06:13