gpt4 book ai didi

c# - 从 MVC 路由处理程序返回 404

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:36 25 4
gpt4 key购买 nike

我有一个 IP 列表,这些 IP 不断抓取我们的实时网站,当它们使用某些没有参数的 URL 时会抛出异常(由于 MVC 路由)。我想阻止这些 IP 地址,并在可以获取它们时立即返回 404 未找到页面,但我不想在 IIS 中执行此操作,因为我想在我们的应用程序中记录遇到的情况。

我编写了一个包罗万象的路由处理程序,它使用自定义 MvcHandler 来检查列表并修改响应:

public class ApplicationRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
BlacklistedIPAddressHandler handler = new BlacklistedIPAddressHandler(Cache.WebsiteCache.GetBlacklistedIPList(), requestContext);

return handler;
}
}

public class BlacklistedIPAddressHandler : MvcHandler
{
List<IPBlacklistModel> blacklist;

public BlacklistedIPAddressHandler(List<IPBlacklistModel> Blacklist, RequestContext requestContext) : base(requestContext)
{
blacklist = Blacklist;
}

protected override IAsyncResult BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, object state)
{
var ip = httpContext.Request.UserHostAddress;

if (blacklist != null &&
blacklist.Where(x => x.IP_ADDRESS.Contains(ip)).Count() > 0)
{

httpContext.Response.ClearHeaders();
httpContext.Response.Clear();

httpContext.Response.StatusCode = 404;
httpContext.Response.SuppressContent = true;
httpContext.Response.End();
}

return base.BeginProcessRequest(httpContext, callback, state);
}
}

然后实现如下:

    public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = @"[^\.]*" }
).RouteHandler = new Helpers.Routing.ApplicationRouteHandler();
}

当我执行此操作时,我不断收到服务器无法在发送 HTTP header 后附加 header 错误。有人可能知道为什么吗?

最佳答案

我想你应该从你的处理程序中删除 httpContext.Response.End(); 语句 - 因为请求被传递以进行进一步处理,所以现在不应该终止它。

HttpResponse.End 方法描述来自 MSDN :

Sends all currently buffered output to the client, stops execution of the page, and raises the EndRequest event.

关于c# - 从 MVC 路由处理程序返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821517/

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