Корневой 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",
...
Он работает на моей машине и на сервере.
Надеюсь, что это поможет.