Chiamata AJAX ritorno 404(Locale) in IIS 7.5, ma lo stesso funziona in altri IIS

Sto avendo le chiamate AJAX per il mio controller nella mia Applicazione MVC

Controller/FunctionName



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

Sto usando MVC 4 e facendo uso di JQUERY Ajax funzione come mostrato nel codice di cui sopra. Funziona tutto bene, quando ho eseguito da Visual studio.

Ho depolyed questo alla macchina server e, come previsto, funziona bene. Non ci sono problemi riscontrati in chiamate AJAX.

Ora sto cercando di distribuire questo nella mia macchina locale IIS, che è lo stesso mio server versione (IIS 7.5) ma sono sempre 404 per tutte le chiamate ajax in firebug.

Ho verificato la build e anche ho puntato la mia cartella web e sto ancora cercando di capire che cosa è andato storto !!

Funziona in altri IIS così Non sarà un URL risoluzione di un problema è il mio gues. Mi sto perdendo tutte le impostazioni o un’idea tempestiva per risolvere questo sarebbe grande.

Grazie

 

4 Replies
  1. 35

    Che è normale. Hai inserito il url per l’azione del controllore:

    url: '/Controller/FunctionName',

    Se si distribuisce l’applicazione in una directory virtuale in IIS l’url corretto dovrebbe essere:

    url: '/YourAppName/Controller/FunctionName',

    Che è il motivo per cui si dovrebbe assolutamente mai codificare gli url in un ASP.NET applicazione MVC ma SEMPRE utilizzare url aiutanti di generare:

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

    e se questa chiamata AJAX è in un file javascript separato dove non è possibile utilizzare sul lato server aiutanti, allora si potrebbe leggere l’url da qualche elemento del DOM che si sono AJAXifying.

    Per esempio, supponiamo che una di ancoraggio:

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

    che si AJAXify:

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

    Notare come stiamo leggendo l’url da DOM elemento che è stato generato da un assistente.

    Conclusione e 2 regole:

    • MAI inserire un url in un ASP.NET applicazione MVC
    • ASSOLUTAMENTE SEMPRE utilizzare url helper quando ha a che fare con gli url in un ASP.NET applicazione MVC
    • Totalmente d’Accordo con te @Darin . Come funziona in IIS, ma non in altri ?
    • Stessa Domanda. Se si lavora in un altro IIS perché non in altri ?
    • Dipende da come l’applicazione è configurata, se è direttamente implementato in un sito web o come directory virtuale.
    • Grazie @Darin. Awsome.
    • Un Ultima domanda, sto scrivendo questo in Javascript. ho avuto il tuo Actionlink Esempio. Bt è in grado di aggiornare lo stesso scenario su clic del Pulsante. Come posso ottenere quei link ?
    • Si potrebbe incorporare il link del pulsante come HTML5 dati* attributo: <input type="button" id="myButton" data-url="@Url.Action("SomeAction", "SomeController")" value="click me" /> e poi nel tuo file javascript separato vuoi iscriviti alla .evento click del pulsante e recuperare l’url utilizzando var url = $(this).data('url');.
    • Grande ! Un altro tipo di approccio, in quanto non siamo utilizzando html5 di sicurezza. Come faccio a gestire questo se non si utilizza HTML5. e Grazie per la splendida risposta !
    • Grande ! Un altro tipo di approccio, in quanto non siamo utilizzando html5 di sicurezza. Come faccio a gestire questo se non si utilizza HTML5. e Grazie per la splendida risposta !
    • Santo snit. Dopo 2 ore di ricerca e di debug, questo ha risolto il mio problema. Io, ora, l’invio Url per chiamare dall’AJAX di AngularJS.

  2. 1

    Solo un complemento di Darin risposta che, se “la chiamata AJAX è in un file javascript separato dove non è possibile utilizzare sul lato server aiutanti”, utilizzare un campo nascosto per memorizzare l’url dell’endpoint in vista:

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

    e leggere che il campo nascosto nel vostro js:

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

    Quello che avevo trovato sul mio setup di IIS7.5 è che il ‘Mapping’ è una risorsa denominata ‘OPTIONSVerbHandler’ non è impostato nel giusto ordine, quindi, tornare indietro come Sconosciuto.

    Questo lavoro per me dove il mio localhost ajax stava chiamando il mio server di rete, che ha un nome diverso, che non dovrebbe darmi un CORS problema, ma lo ha fatto e questa è stata la mia soluzione.

    Aprire IIS e fare clic sul nome del server nel riquadro di sinistra. Nel riquadro di destra fare doppio clic su ‘Handler Mapping’ nel riquadro centrale. Nel riquadro di destra, selezionare “Visualizza Elenco Ordinato’. Da lì trovare ‘OPTIONSVerbHandler’ e ‘svc-ISAPI-4.0_32bit’ spostare ‘OPTIONSVerbHandler’ fino a quando non è al di sopra ‘di svc-ISAPI-4.0_32bit’.

    Assicurarsi che il ‘gestore’, all’interno della tua chiamata ajax non è “Access-Control-Allow-Origin’ in esso.

  4. 0

    È possibile utilizzare un doppio punto nell’url:

    $.ajax({
       url: '../ControllerName/ActionName',
       .......
    });

Lascia un commento