客户端相对寻址,并且不允许在应用程序URL中使用斜杠



我在ASP.NET Core 3.1中遇到了一个奇怪的问题,这是我的ASP.NET 4应用程序中没有的,如果我通过访问我的应用程序

http://example.com/Application/

然后一切正常,但如果我尝试去

http://example.com/Application(无尾斜线(

则客户端相对地址解析为CCD_ 3而不是CCD_。

我在提到应用程序的根时也遇到了类似的问题。例如,/Resource似乎是相对于域的,因此产生http://example.com/Resource。CCD_ 7本身正确地产生CCD_。但是如何称呼"根"本身呢?重定向到空字符串似乎会刷新页面,而不是重定向到应用程序根目录。

我通过使用.和使用./Resource而不是Resource来解决这个问题。这似乎在几乎所有情况下都有效,除非在访问应用程序时没有尾部斜杠。

访问http://example.com/Application时,AJAX调用以./Method?handler=name形式的URL为目标,导致请求http://example.com/Method?handler=name(缺少路径的Application部分(。

如何获得客户端相对地址以一致地引用正确的应用程序根地址?或者这可能是正常行为吗?

您需要将主模板(ASP.NET Core MVC中的_Layout.cshtml(中的基本url设置为应用程序路径。

_Layout.cshtml中添加

<base href="~/"/>

~/是ASP.NET Core将用http://example.com/Application替换的应用程序路径(也称为web根(。通常,如果您需要应用程序相对路径,您应该始终执行<a href="~/app/relative/path"></a>

当涉及静态json文件时,这可能会证明有点困难,所以<base href="..."/>在这种情况下应该工作

试试这个:

function stripSlashEnds(url){
return url.replace(/^/|/$/g, '');
}
console.log(stripSlashEnds('http://example.com/Application/')+'/'+stripSlashEnds('/anotherFile/'));
console.log(stripSlashEnds('http://example.com/Application')+'/'+stripSlashEnds('/anotherFile'));

请注意,stripSlashEnds只是从字符串的开始和结束处移除前睫毛。您必须+'/'添加一个。

最新更新