如何将ASP.NET的中止请求重写规则转换为.NET Core版本
解决方法
.NET Core 重写中间件的AddRewrite方法仅用于路径替换逻辑,没有内置对应IIS AbortRequest的终止请求能力,你可以通过自定义重写规则实现需求:
代码实现(直接写在Program.cs中即可)
var rewriteOptions = new RewriteOptions() .Add(rewriteContext => { var requestUrl = rewriteContext.HttpContext.Request.Path.Value; // 代入你需要匹配的正则规则 if (Regex.IsMatch(requestUrl, @"([^\?].?.$)|([^\?].*~$)")) { // 直接终止HTTP连接,和原IIS规则AbortRequest效果完全一致 rewriteContext.HttpContext.Abort(); // 标记规则处理完成,不再执行后续重写规则和其他中间件 rewriteContext.Result = RuleResult.EndResponse; } }); // 注意:UseRewriter要放在UseRouting、UseStaticFiles等中间件之前注册 app.UseRewriter(rewriteOptions);
补充说明
- 如果编译报错找不到
Regex类,需要补引用命名空间:using System.Text.RegularExpressions; - 如果不需要直接断开连接,也可以选择返回指定状态码(比如403/404),修改规则逻辑即可:
if (Regex.IsMatch(requestUrl, @"([^\?].?.$)|([^\?].*~$)")) { rewriteContext.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden; rewriteContext.Result = RuleResult.EndResponse; }
- 你当前贴的正则规则未包含波浪符的匹配逻辑,请根据实际拦截需求调整正则表达式,避免误拦截正常请求。
内容的提问来源于stack exchange,提问作者LukePerrin
相关产品推荐
相关产品推荐

