asp.net MVC маршрутизация - ошибки JavaScript 404 URL - PullRequest
2 голосов
/ 15 июля 2011

При разработке моего приложения (asp.net mvc3) локально все было хорошо, используя сервер приложений VS dev. Приложение было расположено по адресу localhost /. Однако я пытаюсь развернуть приложение на сервере IIS 7.5 в каталоге / Management и у меня много проблем с маршрутизацией, так как несколько вызовов в моем приложении зависят от того, находится ли приложение на маршруте.

У меня есть некоторый код javascript, который вызывает мой контроллер через вызов ajax, который выглядит следующим образом:

url: "/en/Home/GetFormula/"

Я бы хотел перейти по адресу: / Management / en / Home / GetFormula, но вместо этого он идет в корень сайта и ищет / en / Home / GetFormula и возвращает 404 ошибки.

Любые идеи о том, как я могу исправить мою маршрутизацию JavaScript по умолчанию / Management / в качестве корня сайта?

Спасибо

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

Когда псевдо-URL, передаваемый HTTP-запросу, начинается с косой черты (например, «/ path / to / resource»), псевдо-URL «завершается», обрабатывая его так, как если бы данный путь находился под веб-сайтом. корневой каталог (например, "http://my.site/path/to/directory").

Очевидно, вы ожидали, что псевдо-URL будет обработан так, как если бы указанный путь находился в корневом каталоге вашего веб-приложения. Ну, у меня для вас плохие новости: протокол HTTP не имеет отношения к такому понятию, как «веб-приложение».

ASP.NET MVC Framework предоставляет функцию Url.Content, которая принимает псевдо-URL, начинающиеся с символа тильды (например, "~ / path / to / resource"), и возвращает результат замены символа тильды на Корневой каталог веб-приложения (например, «http://my.site/an/application/path/to/resource", при условии, что корневым каталогом веб-приложения является« http: /my.site/an/application »). Однако ASP.NET MVC Framework доступен только на стороне сервера. Если ваш JavaScript работает на стороне клиента, он не может вызвать Url.Content.

Но не все потеряно. ASP.NET MVC Framework позволяет динамически генерировать код JavaScript на сервере и запускать его на клиенте , точно так же, как позволяет динамически генерировать HTML-контент и, конечно, отправлять его на клиент . Таким образом, вы можете расширить псевдо-URL-адреса до фактических URL-адресов на стороне сервера и развернуть полученный код JavaScript на клиенте.

1 голос
/ 15 июля 2011

Я решил эту проблему, добавив html скрытое поле на свою страницу, где на стороне сервера я поместил правильный URL-адрес, выведенный с помощью метода Url.RouteUrl, например:Код JavaScript, который вы могли бы сделать это:

url: $("#MyHiddenFieldName).val()
1 голос
/ 15 июля 2011

Чтобы избежать путаницы с тем, где вы сейчас находитесь, попробуйте:

url: document.URL + "/Management/Home/GetFormula"
...