我在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
只是从字符串的开始和结束处移除前睫毛。您必须+'/'
添加一个。