2013-06-27 5 views
16

mam AJAX wzywa do mojego kontrolera w moim MVC AplikacjaAJAX połączeń powrocie 404 (lokalne) w IIS 7.5, ale te same prace w innych IIS

Controller/FunctionName 



$.ajax({ 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     url: '/Controller/FunctionName', 
     . 
     . 
     . 
     )}; 

używam MVC 4 i wykorzystanie JQUERY Ajax funkcji, jak pokazano w powyższym kodzie. Działa całkiem dobrze, gdy uruchamiam program Visual Studio.

Zdelegalizowałem to do maszyny serwerowej i zgodnie z oczekiwaniami działa dobrze. Nie znaleziono problemów w wywołaniach AJAX.

Teraz staram się wdrożyć to w moim komputerze lokalnym IIS który jest taki sam jak mój serwer wersji (IIS 7.5) ale otrzymuję 404 dla wszystkich ajax połączeń w Firebug.

Sprawdziłem kompilację i nawet wskazałem na mój folder sieciowy i nadal szukam tego, co poszło nie tak !!

Działa w innych usługach IIS, więc nie będzie to problem z rozwiązywaniem adresów URL. Brakuje mi żadnych ustawień lub Każdy aktualny pomysł, aby to naprawić, byłby świetny.

Dzięki

Odpowiedz

32

To normalne. Masz ustalony adres URL do akcji kontrolera:

url: '/Controller/FunctionName', 

Jeśli wdrożyć aplikację w katalogu wirtualnego w IIS prawidłowy adres URL powinien być:

url: '/YourAppName/Controller/FunctionName', 

To jest powód, dla którego nigdy nie powinien absolutnie hardcode adresy URL w aplikacji ASP.NET MVC, ale zawsze używają url pomocników, aby wygenerować go:

url: '@Url.Action("FunctionName", "Controller")', 

a jeśli to wywołanie AJAX jest w oddzielnym pliku javascript, gdzie nie można używać pomocników po stronie serwera, wtedy możesz przeczytać ten URL z jakiegoś elementu DOM, który jest AJAXifying.

Na przykład załóżmy, że trzeba było kotwicę:

@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" }) 

że AJAXify:

$('#myLink').click(function() { 
    $.ajax({ 
     url: this.href, 
     contentType: 'application/json; charset=utf-8', 
     type: 'GET', 
     . 
     . 
     . 
    )};  
    return false; 
}); 

Wskazówki jak czytamy URL z elementu DOM, który został wygenerowany przez pomocnika.

Wnioski i 2 reguły kciuka:

  • NIGDY hardcode url w aplikacji ASP.NET MVC
  • CAŁKOWICIE ZAWSZE pomocnicy użycie URL w kontaktach z adresów URL w ASP.NET aplikacja MVC
+1

Całkowicie Zgadzam się z Tobą @ Darin. Jak to działa w jednym IIS, ale nie w innym? – user2067567

+0

@Darin To samo pytanie. Jeśli działa w innych usługach IIS, dlaczego nie w drugiej? – Peru

+1

To zależy od konfiguracji aplikacji - od tego, czy jest ona wdrożona bezpośrednio na stronie internetowej, czy jako katalog wirtualny. –

0

Co znalazłam na mojej konfiguracji IIS7.5 jest to, że „Handler Mapowanie” ma zasób o nazwie „OPTIONSVerbHandler” nie jest ustawiony we właściwym porządku kury ce wróć jako Nieznany.

Ta praca jest dla mnie, gdy mój localhost ajax wywoływał mój serwer sieciowy, który ma inną nazwę, że nie powinien dać mi problemu z CORS, ale tak się stało i to było moje rozwiązanie.

Otwórz IIS i kliknij nazwę swojego serwera na lewym panelu. W prawym okienku kliknij dwukrotnie "Mapowanie handlera" w środkowym okienku. W prawym okienku wybierz opcję "Wyświetl uporządkowaną listę". Stamtąd znajdź "OPTIONSVerbHandler" i "svc-ISAPI-4.0_32bit", przesuń "OPTIONSVerbHandler", aż będzie powyżej "svc-ISAPI-4.0_32bit".

Upewnij się, że twój "handler" w twoim wywołaniu ajaxowym nie ma w sobie "Access-Control-Allow-Origin".

0

tylko uzupełnieniem Darin's answer że jeśli „wywołanie AJAX jest w oddzielnym pliku javascript, gdzie nie można wykorzystać pomocników po stronie serwera”, wykorzystać ukryte pole do przechowywania końcowy URL w widoku:

@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller")) 

i przeczytaj to ukryte pole w twoim js:

url: $("#URLEndpointName").val(),