gpt4 book ai didi

asp.net - http 处理程序在 MVC IIS 8.0 中不起作用

转载 作者:行者123 更新时间:2023-12-02 03:43:33 24 4
gpt4 key购买 nike

我想在我的 mvc 网站中为我的验证码添加 http 处理程序并将其添加到 webconfig

     <system.webServer>

<handlers>
<add name="HandlerName"
path="captcha.ashx" verb="*" type="ManagedFusion.Web.Handlers.CaptchaImageHandler"
resourceType="Unspecified" />
</handlers>
</system.webServer>

但是我的验证码图片没有显示,当我看到这个 url“http://localhost:2492/captcha.ashx”时,我得到这个错误“找不到资源”

这是我的 globals.asax

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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


routes.IgnoreRoute("{resource}/{any}.ashx");
routes.IgnoreRoute("{any}.ashx");
routes.IgnoreRoute("captcha.ashx");
}

怎么了?

更新:这是我的处理程序实现:

 public class CaptchaImageHandler : IHttpHandler 
{
#region IHttpHandler Members

/// <summary>
/// Gets a value indicating whether another request can use the <see cref="T:System.Web.IHttpHandler"/> instance.
/// </summary>
/// <value></value>
/// <returns>true if the <see cref="T:System.Web.IHttpHandler"/> instance is reusable; otherwise, false.</returns>
public bool IsReusable
{
get { return true; }
}

/// <summary>
/// Enables processing of HTTP Web requests by a custom HttpHandler that implements the <see cref="T:System.Web.IHttpHandler"/> interface.
/// </summary>
/// <param name="filterContext">An <see cref="T:System.Web.HttpContext"/> object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests.</param>
public void ProcessRequest(HttpContext context)
{
// get the unique GUID of the captcha; this must be passed in via the querystring
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.Response.End();
return;
}

// write the image to the HTTP output stream as an array of bytes
using (Bitmap b = ci.RenderImage())
{
b.Save(context.Response.OutputStream, ImageFormat.Gif);
}

context.Response.ContentType = "image/gif";
context.Response.StatusCode = 200;
context.Response.StatusDescription = "OK";
context.Response.End();
}

#endregion

public void Dispose()
{
throw new NotImplementedException();
}

public void Init(HttpApplication context)
{

}
}
}

最佳答案

以防万一你想在这里使用 Mvc 路由是 ManagedFusion.Web.CaptchaImageHandler 的自定义路由处理程序的实现。

public class CaptchaRouteHandler:IRouteHandler 
{
public System.Web.IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new ManagedFusion.Web.CaptchaImageHandler();
}
}

然后,您在 RouteConfig.RegisterRoutes 中的路由定义定义自定义路由:

public static void RegisterRoutes(RouteCollection routes)
{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.Add(
"Captcha Route",
new Route(
"captcha.ashx",
new CaptchaRouteHandler()));

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

然后您可以删除 captcha.ashx 的 web.config httpHandler 子元素。

关于asp.net - http 处理程序在 MVC IIS 8.0 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com