Корневой URL-адрес javascript

Я работаю над брандмауэром .Net ASP MVC.

Корневой URL-адрес сервера: "myWebSite.com/myApp/"

Мне нужно динамически найти этот url для правильного URL-адреса, чтобы сделать какой-то вызов Ajax для действия, как этот

    $.ajax(
    {
        type: "POST",
        url: root + "/Controller/Action",
        data: ...
    }

Я прочитал несколько вещей здесь и там, но то, что я нашел, не работает.

"document.location.hostname" -> "myWebSite.com"
"location.host"              -> "myWebSite.com"
"window.location.pathname"   -> "/myApp/"

Последний прозвучало как обещание, но если я перейду на сайт:

 for an url :  "myWebSite.com/myApp/Controller/Action?1" 
 "window.location.pathname"   -> "/myApp/Controller/Action"

Ответ 1

В asp.net mvc, используя механизм просмотра бритвы, я получил это в своем макете:

<script type="text/javascript">
 var baseUrl = "@Url.Content("~")";
</script>

Таким образом, мы можем определить URL-адрес базы приложений как объект javascript, доступный извне.

Ответ 2

Вам не нужно это искать. Используйте путь realtive:

    $.ajax(
    {
        type: "POST",
        url: "Controller/Action",
        data: ...
    }

Это будет выглядеть как <root>/Controller/Action

Ответ 3

Как насчет этого?

var root = "<%=Request.ApplicationPath%>";
alert(root);

Предоставляет ли он правильный URL-адрес корня?

Ответ 4

Я использую это:

В бритве:

Uri auxBaseUri = new Uri(Request.Url.GetLeftPart(UriPartial.Authority));
Uri baseUri = new Uri(auxBaseUri, Url.Content("~"));   

Затем в js я использую:

var baseUrl = "@baseUri.ToString()";

$.ajax
({
    type: "POST",
    url: baseUrl + "Controller/Action",
    ...

Он работает на моей машине и на сервере. Надеюсь, что это поможет.