Как получить базовый URL приложения MVC на JavaScript

Как я могу получить базовый 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 является усеченным от.

Комментарии к вопросу (2)
Решение

Вы должны избегать делать такие обнаружения в 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-адрес всегда правильно смешанная (без проверки вручную, если каждая часть начинается или заканчивается с символ/`).

Комментарии (5)
var url = window.location.href.split('/');
var baseUrl = url[0] + '//' + url[2];
Комментарии (3)

Я не'т думаю, что это возможно, как JavaScript (клиент) не't знаю что-нибудь о развертывании (myapp) и рассматривает его как часть pathinfo (как и индекс /дома/). В качестве обходного пути, вы могли бы попытаться интерпретировать pathinfo (расположение.пути) в соответствии с доменом или порт.

Но вы можете установить переменную JavaScript в глобальной области видимости (или то, что вам подходит), содержащий путь (путь генерируется на сервере и помещается в переменную).

Это может выглядеть что-то вроде этого в HTML-руководитель:

<script type="text/javascript">
    var global_baseurl = '';
</script>
Комментарии (0)

Попробуйте ниже код.

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());

Спасибо,

Шива

Комментарии (2)

Если вы используете .Чистая ядра, вы можете получить 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>
Комментарии (0)

Я думаю, что правильное решение будет, как

Собираем базовый 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/

Комментарии (0)
var base_url = "@Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")"

Определить его в файл макета и добавление base_url. Этот работал для меня.

Комментарии (0)

Вы можете установить базовый URL-адрес в голова тег вашу страницу. Все ссылки/hrefs будет использовать это, чтобы вызвать relatieve hrefs.

@{ var baseHref = new System.UriBuilder(Request.Url.AbsoluteUri) { Path = Url.Content("~/") }; }

Объяснение:

  • URL-адрес.Содержание (и"~/", у) возвращает относительный путь (в данном случае приложение на сервере)
  • новая система.UriBuilder(Запрос.URL-адрес.AbsoluteUri) создает UriBuilder, содержащую порт и протокол
Комментарии (0)