Как я могу получить базовый URL-адрес с помощью JavaScript?
Е. Г., При просмотре сайта из Visual Studio, а если мой URL-адреса http://localhost:20201/home/index
я хочу сделать http://localhost:20201
Если я размещаю свой сайт на IIS, и если мое имя виртуального каталога myapp и URL-адреса http://localhost/MyApp/home/index
я хочу сделать http://localhost/MyApp
Я попытался с помощью местоположение.расположение протокола
+.хоста
(и местоположение.хоста
), они прекрасно работают, когда я просматривать мой сайт через Visual Studio, но когда я разместить его на IIS, я получаю `http://localhost в /myapp является усеченным от.
Вы должны избегать делать такие обнаружения в JavaScript и вместо того, чтобы передать значение .Net код. Вы всегда рискуете нарваться на проблемы с URL-адреса, такие как http://server/MyApp/MyApp/action
где вы не знаете, это название контроллера и где путь к приложению.
В ваш макет.cshtml файл (или куда вам нужно) добавить следующий код:
<script type="text/javascript">
window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(Url.Content("~/"), true));
alert(window.applicationBaseUrl + "asd.html");
// if you need to include host and port in the url, use this:
window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(
new Uri(
new Uri(this.Context.Request.Url.GetLeftPart(UriPartial.Authority)),
Url.Content("~/")
).ToString(), true));
alert(window.applicationBaseUrl + "asd.html");
</script>
В новый URI () часть необходима, так что URL-адрес всегда правильно смешанная (без проверки вручную, если каждая часть начинается или заканчивается с
символ/`).
Я не'т думаю, что это возможно, как JavaScript (клиент) не't знаю что-нибудь о развертывании (myapp) и рассматривает его как часть pathinfo (как и индекс /дома/). В качестве обходного пути, вы могли бы попытаться интерпретировать pathinfo (расположение.пути) в соответствии с доменом или порт.
Но вы можете установить переменную JavaScript в глобальной области видимости (или то, что вам подходит), содержащий путь (путь генерируется на сервере и помещается в переменную).
Это может выглядеть что-то вроде этого в HTML-руководитель:
<script type="text/javascript">
var global_baseurl = '<insert server side code that gets the path depending on your server side programming language>';
</script>
Попробуйте ниже код.
function getBaseURL() {
var url = location.href; // entire url including querystring - also: window.location.href;
var baseURL = url.substring(0, url.indexOf('/', 14));
if (baseURL.indexOf('http://localhost') != -1) {
// Base Url for localhost
var url = location.href; // window.location.href;
var pathname = location.pathname; // window.location.pathname;
var index1 = url.indexOf(pathname);
var index2 = url.indexOf("/", index1 + 1);
var baseLocalUrl = url.substr(0, index2);
return baseLocalUrl + "/";
}
else {
// Root Url for domain name
return baseURL + "/";
}
}
document.write(getBaseURL());
Спасибо,
Шива
Если вы используете .Чистая ядра, вы можете получить URL-адрес установки JavaScript-переменной в глобальной области видимости (например, в макет.cshtml файл, этот файл находится в папке Views/общий):
<script type="text/javascript">
var url = '@string.Format("{0}://{1}{2}", Context.Request.Scheme, Context.Request.Host.Value , Url.Content("~/"))';
</script>
Из версии C# 6 с помощью интерполяции:
<script type="text/javascript">
var url = '@($"{Context.Request.Scheme}://{Context.Request.Host.Value}{Url.Content("~/")}")';
</script>
Я думаю, что правильное решение будет, как
Собираем базовый URL-адрес в файл _Layout` html как так
<div id="BaseUrl" data-baseurl="@Context.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")"></div>
Контекст.Запрос.URL-адрес.GetLeftPart(UriPartial.Органа) дам вам в
местные http://localhost:20201 из IIS даст вам http://localhost
URL-адрес.Содержание (и"~/", У) в местной будет пуста, но в IIS выдаст вам название приложения, в вашем случае приложение
Затем с ПЛ:
var baseUrl = $("#BaseUrl").data("baseurl");
Чем можно использовать как:
$.getJSON(baseUrl + "/Home/GetSomething", function (data) {
//Do something with the data
});
https://msdn.microsoft.com/en-us/library/system.uri.getleftpart(в=против 110).аспн http://api.jquery.com/data/
var base_url = "@Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")"
Определить его в файл макета и добавление base_url. Этот работал для меня.
Вы можете установить базовый URL-адрес в голова тег вашу страницу. Все ссылки/hrefs будет использовать это, чтобы вызвать relatieve hrefs.
@{ var baseHref = new System.UriBuilder(Request.Url.AbsoluteUri) { Path = Url.Content("~/") }; }
<base href="@baseHref" />
Объяснение: