【问题标题】:Remove additional slash from URL in Asp.Net Core从 Asp.Net Core 中的 URL 中删除附加斜杠
【发布时间】:2021-03-29 02:25:46
【问题描述】:

我有一个网站,托管在 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);

这两种方法在一定程度上都在本地工作;但是,似乎在 Kestrel 下运行时,斜线会自动减少为一个。将其部署到 Azure 应用服务时,会发生以下情况:

  • 斜线仍然存在(例如 https://mysitecom//test//test2)
  • 正确的页面位于
  • 中间件只能看到一个斜杠

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

(所以不允许我在帖子中使用实际 URL)

【问题讨论】:

  • 什么是添加额外的斜线?
  • 所以你说在使用 Kestrel 或 Azure App Service 时你想要做的事情已经完成,并且无论如何都加载了正确的页面?坦率地说,真正的解决方案是修复任何产生无效 URL 的问题。否则你是在花钱掩盖别人的错误。
  • 正在为此付出代价。 Redirect 向浏览器发送 302 响应。您为出站流量付费,这意味着您实际上是在为那些格式错误的 URL 付费
  • 这些 cmets 可能是真的;但是,这清楚地揭示了我不了解的有关 Azure 应用服务的一些内容。这里的问题不是:“我怎样才能让它工作”,而是“请你解释一下它为什么会这样”
  • 您是在 Windows 还是 Linux 上托管?

标签: azure asp.net-core http-redirect asp.net-core-middleware


【解决方案1】:

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

如果你想检测“原始”URL,你可以试试这样:

// => /test/test2
var path1 = Request.Path

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

这种行为有多种来源,但我不确定如果你愿意,你可以如何关闭它。

【讨论】:

  • 当我在 IIS Express 下本地运行时,我可以在您的建议中看到双斜杠(对于 Request.Path 和 path2。但是,当部署到 Azure App Service 时,只有一个单斜杠。这让我觉得不是 IIS 导致了这种情况(我意识到 IIS Express 与运行的 IIS 并不完全相同)
  • 它仍然可以是 IIS,因为本地 IIS Express 和 AppService 之间的全局配置(例如 applicationhost.config)仍然可能不同。就像您在我的资料中看到的那样,这是一种独立于 AppService 的有据可查的行为。
  • applicationhost.config 的哪个设置会导致组合斜线?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
相关资源
最近更新 更多