代码之家  ›  专栏  ›  技术社区  ›  Paul Michaels

从中的URL中删除附加斜杠Asp.Net核心

  •  0
  • Paul Michaels  · 技术社区  · 5 年前

    我有一个网站,托管在Azure应用程序服务上。我想做的是重定向流量,这样地址如下:

    https://mysitecom//test//test2
    

    https://mysitecom/test//test2
    

    将重定向到同一位置:

    https://mysitecom/test/test2
    

    到目前为止,我已经尝试添加一些中间件来处理这个问题;例如:

    app.Use(next => context =>
    {
        if (context.Request.Path.Value.Contains("//"))
        {            
            context.Response.Redirect(context.Request.Path.Value.Replace("//", "/"), true);
            return;
        }
    });
    

    var options = new RewriteOptions()
        .AddRedirect("redirect-rule/^(.*)//(.*)$", "redirected/$1/%2");                                       
    
    app.UseRewriter(options);
    

    • 斜杠保留(例如。https://mysitecom//test//test2测试)
    • 找到正确的页面
    • 中间件只能看到一条斜线

    有人能解释为什么中间件(或者重定向)在部署到Azure时只看到一个斜杠吗?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Alex AIT    5 年前

    如果您的站点在Windows AppService上运行,则它在IIS中运行。您遇到了一个IIS特性(我认为是“URL重写模块”)。如果在Linux上运行同一个站点,它的行为将有所不同。

    如果要检测“原始”URL,可以尝试以下操作:

    // => /test/test2
    var path1 = Request.Path
    
    // => //test//test2
    var path2 = HttpContext.Features.Get<IServerVariablesFeature>()["UNENCODED_URL"]
    

    推荐文章