Относительная адресация на стороне клиента и не допускается конечный знак sh в URL приложения - PullRequest
0 голосов
/ 12 марта 2020

У меня странная проблема с ASP. NET Core 3.1, которой у меня нет в моих ASP. NET 4 приложениях, где, если я получаю доступ к своему приложению через

http://example.com/Application/

, тогда все работает нормально, но если я попытаюсь go до

http://example.com/Application (без трейлинга sh)

, то относительные адреса на стороне клиента решить http://example.com/Resource вместо http://example.com/Application/Resource.

У меня были похожие проблемы, связанные с root приложения. Например, /Resource, кажется, означает относительно домена, и поэтому выдает http://example.com/Resource. Resource само по себе правильно дает http://example.com/Application/Resource. Но как ссылаться на сам "root"? Перенаправление на пустую строку, кажется, обновляет sh страницу вместо перенаправления в приложение root.

Я справился с этим, используя . и ./Resource вместо Resource , Похоже, это работает почти во всех случаях, за исключением случаев, когда доступ к приложению без завершающего слэ sh.

При обращении к http://example.com/Application, AJAX вызовам с таргетингом на URL-адреса вида ./Method?handler=name приводит к запросу http://example.com/Method?handler=name (отсутствует часть пути Application).

Как получить относительные адреса на стороне клиента для последовательного обращения к правильному адресу root приложения? Или возможно, что это нормальное поведение?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вам необходимо установить базовый URL в вашем основном шаблоне (_Layout.cshtml в ASP. NET Core MVC) для пути приложения.

В _Layout.cshtml добавить

<base href="~/"/>

~/ - это путь вашего приложения (также называемый web root), который ASP. NET Core заменит на http://example.com/Application. Как правило, если вам нужны относительные пути к приложениям, вы всегда должны делать <a href="~/app/relative/path"></a>.

. Это может немного затруднить работу с файлами stati c json, поэтому <base href="..."/> должно работать в этом случае

0 голосов
/ 12 марта 2020

Попробуйте это:

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 просто удаляет прямые ресницы с начала и конца строки. Вам придется +'/' добавить один.

...