【问题标题】:Why doesn't ASP.NET Core rewrite middleware behave as expected?为什么 ASP.NET Core 重写中间件的行为不符合预期?
【发布时间】:2021-01-05 19:26:25
【问题描述】:
            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]+", "/blog.html", true);

现在它被破坏了(应用程序的行为就像规则不存在一样),即使在它之后有另一个规则。

我错过了什么?

【问题讨论】:

    标签: c# asp.net-core url-rewriting asp.net-core-middleware


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多