Come configurare web.config per consentire richieste di qualsiasi lunghezza


138

Sto costruendo un sito in cui vorrei creare un lato client di file dal valore di un elemento textarea.

Ho il codice in atto per farlo, ma sto ottenendo questo errore

Errore HTTP 404.15 - Non trovato Il modulo di filtro richieste è configurato per rifiutare una richiesta in cui la stringa di query è troppo lunga.

C'è un modo per sovrascriverlo in modo da poter elaborare richieste di qualsiasi dimensione?

In caso contrario, c'è un modo per generare file lato client senza usare il filesystem / oggetto x attivo?

Grazie


8
Quello che vuoi considerare è che anche se la lunghezza della stringa di query può essere configurabile per IIS o per la tua applicazione, esiste uno standard HTTP per la lunghezza dell'URL. Poiché stai utilizzando una stringa di query, stai passando valori come parte dell'URL. La lunghezza massima dei caratteri URL è di 2000 caratteri. Se i tuoi valori saranno stringhe lunghe, sarebbe meglio POSTARE i valori piuttosto che passarli nella stringa di query.
Jeff LaFay,

2
D'accordo con Jlafay. È consigliabile POSTARE i valori quando si hanno più di 2-3 parametri semplici. e quando usi la stringa di query assicurati di crittografarli.
Jack,

Risposte:


244

Aggiungi quanto segue al tuo web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>

Vedere:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

Aggiornato per riflettere i commenti.

requestLimits Element for requestFiltering [Schema impostazioni IIS]

Potrebbe essere necessario aggiungere anche quanto segue nel proprio web.config

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

Vedi: elemento httpRuntime (schema delle impostazioni ASP.NET)

Naturalmente i numeri (32768 e 65536) nelle impostazioni di configurazione sopra sono solo esempi. Non devi usare quei valori esatti.


24
Questo da solo non era abbastanza per me. Ho dovuto aggiungere anche questo alla sezione system.web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick il

2
nnn è la lunghezza massima della stringa che desideri consentire, ad esempio 32768
Matt Varblow


Ho provato ognuno singolarmente, impostando il nodo di sicurezza in system.webServer e quindi rimuovendo e semplicemente aggiungendo gli attributi al nodo httpRuntime. Avevo sicuramente bisogno di entrambi per lavorare. Grazie molto!
David Gunderson,

2
Nota: il tag <httpRuntime> va in <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay

33

Nel mio caso (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .Net Framework 4.5) ciò che ha funzionato davvero dopo 30 minuti di prova ed errore è stata l'impostazione della maxQueryStringLengthproprietà nel <httpRuntime>tag:

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLengthil valore predefinito è 2048.

Maggiori informazioni qui:

Espansione dell'intervallo di URL consentiti


Ho provato a impostarlo <system.webServer>come suggerisce @MattVarblow , ma non ha funzionato ... e questo perché sto usando IIS Express (basato su IIS 8) sulla mia macchina di sviluppo con Windows 8.

Quando ho distribuito la mia app nell'ambiente di produzione (Windows Server 2008 R2 con IIS 7), IE 10 ha iniziato a restituire 404 errori nelle richieste AJAX con stringhe di query lunghe. Quindi ho pensato che il problema fosse legato alla stringa di query e ho provato la risposta di @ MattVarblow. Ha funzionato su IIS 7. :)


2
Per me è stato l'abilitazione = "vero" che ha reso possibile la magia :)
Johann Combrink,

6

Qualcos'altro da controllare: se il tuo sito utilizza MVC, ciò può accadere se hai aggiunto [Autorizza] alla tua classe di controller di accesso. Non può accedere al metodo di accesso perché non è autorizzato, quindi reindirizza al metodo di accesso -> boom.


Grazie! Ho riscontrato questo problema perché ho spostato il menu / navigazione in una vista parziale e in un altro controller che non consentiva connessioni anonime.
Westerlund.io

Un altro caso in cui il messaggio di errore, sebbene vero, non ha alcuna relazione con il problema reale.
Steve Smith,

1
Controlla anche le proprietà del progetto in quanto potrebbe essere che l'autenticazione di Windows sia "abilitata" e l'autenticazione anonima sia disabilitata ". Leggi questo articolo dettagliato - Errore (Visual Studio 2013, MVC5): il modulo di filtro richieste è configurato per rifiutare una richiesta in cui la stringa di query è troppo lunga
fujiFX

5

Se si verifica questo problema durante l'esecuzione di un server Web IIS 8.5, è possibile utilizzare il seguente metodo.

Innanzitutto, trova il modulo "Filtro richieste" nel sito IIS su cui stai lavorando, quindi fai doppio clic su di esso ...

inserisci qui la descrizione dell'immagine

Successivamente, è necessario fare clic con il tasto destro nell'area bianca mostrata di seguito, quindi fare clic sull'opzione del menu contestuale denominata "Modifica impostazioni funzionalità" .

inserisci qui la descrizione dell'immagine

Quindi l'ultima cosa da fare è cambiare il valore "Numero massimo di query (byte)" dal 2048 a qualcosa di più appropriato come 5000 per le tue esigenze.

inserisci qui la descrizione dell'immagine


Grazie, questa è la soluzione più semplice e funzionante per me
Afif Zafri,

Grazie compagno!!!!!
Noobie,

0

Ho avuto un problema simile nel tentativo di distribuire un'applicazione Web ASP in IIS 8. Per risolvere il problema, ho fatto come suggerito da Matt e Leniel in precedenza. Ma ho anche dovuto configurare le impostazioni di autenticazione del mio sito per abilitare l'autenticazione anonima. E quello ha funzionato per me.


0

Ho dovuto aggiungere [AllowAnonymous] alle funzioni ActionResult nella mia pagina di accesso perché l'utente non era ancora autenticato.


0

Se il tuo sito Web utilizza l'autenticazione, ma non hai il metodo di autenticazione corretto impostato in IIS (ad es. Basic, Moduli ecc.), Il browser verrà bloccato in un ciclo di reindirizzamento. Questo fa sì che l'URL di reindirizzamento diventi sempre più lungo fino a quando non esplode.


0

Inoltre genererà errore quando si passa una stringa di grandi dimensioni nel parametro di chiamata ajax.

quindi per questo usa sempre type post in ajax risolverà il tuo problema al 100% e non dovrai impostare la lunghezza in web.config.

// var UserId = array di 1000 userids

$ .ajax ({global: false, url: SitePath + "/ User / getAussizzMembersData", "data": {UserIds: UserId}, "type": "POST", "dataType": "JSON"}}


-1

Errore HTTP 404.15 - Non trovato Il modulo di filtro richieste è configurato per rifiutare una richiesta in cui la stringa di query è troppo lunga.

Per risolvere questo problema, controlla nel codice sorgente se il Formtag ha una proprietà methodè get / set state.

In tal caso, la methodproprietà deve essere rimossa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.