为什么ASP.NET Core重写中间件不能按预期运行?

问题描述

            var rewriteOptions = new RewriteOptions();;
            rewriteOptions.AddRewrite("\\/blog\\/[0-9]+","/blog.html",true);
            app.UseRewriter(rewriteOptions);

添加了这个中间件来进行URL重写,以使/ blog /指向html页面(此页面中的JS将提取整数,然后对JSON进行适当的请求以获取内容),但是重定向不是发生(应用程序的行为就像没有规则一样)。有什么问题吗?

我在重写中间件之前和之后都添加了它:

            app.Use(async (context,next) =>
            {
                Console.WriteLine(context.Request.Path + "\n");
                await next.Invoke();
            });

所以我知道之前的路径是我期望的,并且之后的路径不会被重写。

当我添加一个规则时,第一个规则开始起作用。经过进一步的测试,似乎我添加的每条规则(最后一条规则除外)都能按预期工作。

之后,我将上述重写规则更改为:

rewriteOptions.AddRewrite("\\/blog-[0-9]+",true);

现在它坏了(应用程序的行为就像没有该规则一样),即使它后面还有另一个规则。

我想念什么?

解决方法

我找到了解决方案。出于某种我不了解的原因,重写中间件会在对正则表达式进行测试之前从URL中删除前面的“ /”,因此一旦对其进行了更新以达到预期效果,正则表达式就可以正常工作。