Pagina HTTP 404 non trovata in Web Api ospitato in IIS 7.5

Ho un’applicazione Web Api. Funziona perfettamente quando l’ho provato usando il server di debugging VS 2010. Ma ora lo ho distribuito su IIS 7.5 e sto ricevendo un errore HTTP 404 quando provo ad accedere all’applicazione.

Ecco il mio web.config

                                 

Anch’io stavo lottando con questo. Fortunatamente, Steve Michelotti ha documentato una soluzione che ha funzionato per me qui .

Alla fine della giornata, ho abilitato tutti i verbi (verb = “*”) al gestore ExtensionlessUrlHandler-Integrated-4.0 nella mia configurazione web.

         

Altri hanno sottolineato che l’triggerszione di WebDAV causa problemi. Fortunatamente, non ho avuto questo problema.

Aveva lo stesso problema. Questa impostazione di configurazione ha risolto il problema.

  .....  .....  

Come spiegato in http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html sopra soluzione dovrebbe essere evitato. Usa questo invece. La stessa soluzione è fornita anche da Lopsided. Mantenerlo qui per consentire agli utenti di evitare l’implementazione della prima soluzione funzionante.

      

Se IIS è installato o abilitato dopo ASP.NET, sarà necessario registrare manualmente ASP.NET con IIS affinché l’applicazione .NET funzioni.

Per Windows 7 e versioni precedenti:

  1. Eseguire il prompt dei comandi (cmd.exe) come amministratore.
  2. Passare alla posizione appropriata di .NET Framework. (ad es. C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319)
  3. Eseguire aspnet_regiis.exe -i

Per Windows 8 e versioni successive:

  1. Dal menu di avvio, digita “Attiva o distriggers le funzionalità di Windows” e seleziona il primo risultato.
  2. Espandi Servizi di informazioni Internet: Servizi Web: Funzionalità di sviluppo applicazioni e seleziona ASP.NET 4.5 (o ASP.NET 3.5 se è necessario supportare progetti su .NET Framework 2.0-3.5).
  3. Clicca OK.

Stai eseguendo l’app Web API in una directory virtuale o un’applicazione?

Ad esempio: ho avuto lo stesso problema quando ho spostato il mio progetto sul mio IIS locale sotto il sito Web predefinito> SampleWebAPI. Credo che ciò sia dovuto al cambiamento nell’instradamento degli URL come segue:

Originale: localhost:3092/api/values
Spostato: localhost/SampleWebAPI/api/values

Se si sposta il progetto Web API sul proprio sito Web in esecuzione su una porta diversa, sembra funzionare.

Nota aggiuntiva: ho ulteriormente complicato il problema aggiungendo api come alias di un’applicazione all’interno del mio sito web che ha causato l’effettivo URL :

localhost:81/api/api/values – notato questo dopo aver spostato il sito Web sul proprio sito web

Pertanto, poiché volevo mantenere una separazione tra il mio sito Web e il sito web di progetto api mvc, ho modificato le regole di routing in global.asax per l’API Web “DefaultAPI” da api/{controller}/{id} a {controller}/{id} e ASP.NET MVC uno Default da {controller}/{id} a info/{controller}/{id} .

Questa è l’unica risposta che ha funzionato per me …

Ho avuto un problema simile … Sembrava che non importa quello che ho fatto, niente veniva reindirizzato e il mio file globale veniva semplicemente ignorato. Ho seriamente preso in considerazione la possibilità di porre fine a tutto prima di trovare questa risposta. Spero che questo link aiuti qualcun altro.

  • Stack Overflow: diagnosi di errori 404 su IIS 7 e ASP.NET MVC

L’aggiunta di quanto segue al file web.config ha funzionato per me:

       

il tag system.webServer era già lì ovviamente, ma ho aggiunto il tag dei moduli e poi rimuovere e aggiungere tag al tag dei moduli.

Alcune cose da verificare:

  1. Assicurati di aver installato .NET Framework 4.
  2. Assicurarsi che la versione 4 di .NET Framework sia selezionata per il sito Web e la directory virtuale (se applicabile).
  3. Assicurarsi di aver installato MVC o di avere le DLL appropriate nella directory bin.
  4. Potrebbe essere necessario consentire le estensioni del servizio Web ASP.NET 4.0
  5. Metti l’applicazione nel proprio pool di app.
  6. Assicurarsi che la directory abbia almeno “Scripts Only” per eseguire le autorizzazioni.

Ho avuto un problema simile. Ho avuto le giuste impostazioni nel mio file web.config ma stavo eseguendo il pool di applicazioni in modalità classica piuttosto che in modalità integrata

immagine dello schermo

Questo problema può anche verificarsi a causa di quanto segue

1. Nel Web.Config

    

2.Assicurarsi che quanto segue sia disponibile nella cartella bin sul server su cui è distribuita l’API Web

  • System.Net.Http

  • System.Net.Http.Formatting

  • System.Web.Http.WebHost

  • System.Web.Http

Questi assembly non verranno copiati nella cartella bin per impostazione predefinita se la pubblicazione avviene tramite Visual Studio perché i pacchetti API Web vengono installati tramite Nuget nel computer di sviluppo. Tuttavia, se si desidera che questi file siano disponibili come parte della pubblicazione di Visual Studio, è necessario impostare CopyLocal su True per questi assembly

Sadish Kumar.V

Ho anche incontrato questo problema. Ho risolto il problema andando al Pool di applicazioni> Nome del pool di applicazioni e modificato .NET Framework dalla versione v.2.0.50727 alla v4.0.30319.

C’è una correzione ufficiale da microsoft: http://support.microsoft.com/kb/980368

NON raccomando fortemente di usare . Questo porta tutte le richieste (anche .jpg, .css, .pdf, ecc.) Saranno elaborate da tutti i moduli HTTP registrati. Ci sono due momentjs negativi: a) carico aggiuntivo sulle risorse hardware; b) potenziali errori, in quanto i moduli http elaboreranno nuovi tipi di contenuti.

Ho iniziato a ricevere 404 risposte dall’API Web dopo aver seguito un tutorial di Windows Azure che mi diceva di aggiungere un file “WebRole.cs” al mio progetto.

Dopo aver rimosso “WebRole.cs” dal mio progetto, le mie chiamate all’API Web hanno iniziato a funzionare di nuovo.

Ho dovuto disabilitare l’opzione di pubblicazione file “Precompila durante la pubblicazione”.

Assicurati che il pool di applicazioni sia in modalità integrata
E aggiungi il seguente al file web.config:

  .....  .....  

Nel mio caso, il problema era semplicemente che stavo cercando di accedere al sito all’indirizzo

myserver.myintranet.com/mysite

Ma il sito Web vincolante per http in IIS non aveva il nome host specificato nell’associazione. Aveva funzionato prima e non ho idea di come sia stato spazzato via.

Una volta che ho inserito myserver.myintranet.com nel nome host, il 404 non c’era più.

In Gestione IIS vai in Bindings … nel riquadro delle azioni, quindi modifica il bind http per specificare il nome host.

Sulla base di questa risposta SO , ho dovuto cambiare path="*." to path="*" per l’ ExtensionlessUrlHandler-Integrated-4.0 in configuration>system.WebServer>handlers nel mio web.config

Prima:

  

Dopo:

  

Ha avuto lo stesso problema, una risposta 404 per i controller API Web quando servito da IIS ma tutto ha funzionato bene da VS2010. Nessuna delle soluzioni di cui sopra ha funzionato per me. Alla fine ho scoperto che il problema era che abbiamo aggiunto il supporto WSE 3.0 per l’applicazione e la dll Microsoft.Web.Services3 mancava nella directory dell’applicazione / bin. Strano, ma dopo aver copiato la DLL, la mapping del percorso ha iniziato a funzionare.

Non dimenticare di implementare global.asax

Che tipo di richiesta HTTP stai facendo?

Questa è una risposta leggermente a sinistra, ma hai provato a rimuovere la pagina di errore predefinita di IIS per 404 per verificare che cosa effettivamente restituisce l’API?

Ho avuto un problema in cui volevo un metodo di controllo per restituire un 404 quando ho inviato l’ID sbagliato ad esso. Ho scoperto che trovavo sempre la pagina “File o directory non trovata” di IIS 404 anziché la risposta HTTP dalla mia API. La rimozione della pagina di errore 404 predefinita ha risolto il problema.

Diverso problema ma non si sa mai che può aiutare;)

Questa parte della configurazione nel file web.config può essere d’aiuto per me: nella sezione system.webServer:

              

Recentemente ho avuto un errore 404 non trovato con tutti i miei percorsi / controller di Web Api 2. Così sono andato sul server attuale e ho provato a navigare usando localhost invece del nome host e ho ottenuto “404.7 Not Found – Il modulo di filtro delle richieste è configurato per negare l’estensione del file”.

Questo post SO mi aiuta a risolverlo.

È stato risolto per me, quando abilito la casella di controllo per UrlRoutingModule-4.0:

Gestione IIS> Moduli> selezionare UrlRoutingModule-4.0> Modifica modulo> selezionare la casella di controllo “Richiama solo per richieste ad applicazioni ASP.NET o gestori gestiti”.

Ho avuto lo stesso problema: su una macchina appena installata con Visual Studio 2013, il progetto web api funzionava con IISExpress, ma non con IIS locale. Ho provato tutto quello che riuscivo a trovare, ma alla fine il problema non era necessario con Web API, ma con MVC: anche se era installato, nessun progetto MVC era in esecuzione.

Ciò che ha funzionato per me è stato disinstallare IIS (da ADD / REMOVE Windows Features), quindi reinstallarlo e quindi eseguire aspnet_regiis -i. Forse questo aiuta qualcun altro.

Ho passato molto tempo cercando un sacco di cose per rendermi finalmente conto che stavo aggiungendo la mia app web non in Sites / Default Web Sites, ma in un altro sito web legato a un’altra porta. Ovviamente provare localhost sulla porta 80 darebbe un 404.

non faccio nulla, aggiungo questo tag in web.config, mentre sta lavorando su questo problema si presenta uno dei seguenti punti

  1. Usa Web Api nello stesso progetto usando i moduli MVC o asp.net

  2. Utilizzare RouteConfig e WebApiConfig in Global.asax come GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);

  3. Usa RouteConfig per 2 scopi, forms di asp.net usando con friendlyurl e routing mvc per il routing MVC

usiamo questo tag in web.config, funzionerà.

   .........................   

Si è imbattuto nello stesso problema con Web API e .Net Core Web API. Funzionava bene in VS 2017 durante il debug, ma restituiva 404 quando veniva pubblicato su IIS 7.5. La soluzione per me era cambiare il modo in cui ho creato il sito. Invece di pubblicare alla radice di un sito Web (creato facendo clic con il pulsante destro su Siti … Aggiungi sito Web), ho dovuto creare un’applicazione (creata facendo clic con il pulsante destro del mouse su un sito Web … Aggiungi applicazione) e pubblicare in quella cartella. Si noti che per la versione Core, ho dovuto modificare l’impostazione della versione di .NET Framework del pool di applicazioni su “Nessun codice gestito”.

Ho lottato anche con questo. Il mio problema era che avevo un servizio Web ASMX che, quando ho inserito un parametro in un metodo web e l’ho testato, mi avrebbe dato il 404. Il metodo particolare aveva funzionato bene in passato e non era stato modificato, solo ripubblicato. Poi sono arrivato qui e ho provato tutte le risposte postate e nulla è stato d’aiuto.

La mia ultima soluzione? So che questo è drastico, ma ho appena creato una nuova soluzione di Visual Studio e un progetto web. MVC selezionato, quindi ho fatto un “Aggiungi”> “Nuovo elemento”, selezionato “Visual C #”> “Web” e “Servizio Web (ASMX)” sotto quello. Ho copiato tutto il mio vecchio codice code-behind, poi ho preso nota dello spazio dei nomi che ha dato il nuovo file nel mio nuovo progetto, quindi ho incollato tutto il mio vecchio codice nel nuovo file code-behind nel nuovo progetto e inserito lo spazio dei nomi di nuovo a quello che era stato. Poi ho creato le mie cartelle nel mio progetto che avevo prima di usare Visual Studio per fare “Aggiungi”> “Nuova cartella”, quindi copiato nei miei file nelle cartelle dal mio altro progetto usando Windows Explorer, quindi facendo clic con il tasto destro su ciascuna cartella in Visual Studio e ha fatto “Aggiungi”> “Oggetto esistente …” e ha tirato gli elementi in quelle cartelle nelle cartelle di Visual Studio del mio nuovo progetto. Ho fatto di nuovo riferimento a tutti i miei assembly .NET, avendo entrambi i progetti aperti in modo da poter confrontare quelli a cui avevo fatto riferimento in precedenza (ne avevo una tonnellata!). Dovevo nominare il mio nuovo progetto leggermente diverso – in pratica ho fatto qualcosa di paragonabile a “GeneralWebApp” invece di “MyWebApp”, per esempio – quindi ho dovuto fare un “Sostituisci tutto” nella mia intera soluzione per sostituire quel nome, quindi sarebbe ottenere il giusto spazio dei nomi per tutti i miei file. Poi ho fatto un “Ricostruisci tutto” sul progetto, quindi l’ho avviato con il pulsante “Riproduci” che Visual Studio fornisce quando l’ho compilato correttamente. Ha funzionato bene. Così l’ho pubblicato e tutto andava bene sul server dove l’ho pubblicato, quando l’ho eseguito da lì. Non ho alcuna spiegazione su cosa sia successo, ma è così che l’ho superato. Non è un test negativo solo per vedere se qualcosa che sta facendo Visual Studio ha fatto un pasticcio.