2013-07-11 2 views
8

Sto provando a reindirizzare a una vista e continuo a ricevere l'errore nel titolo della domanda.La lunghezza della stringa di query per questa richiesta supera il valore maxQueryStringLength configurato

Durante il test del punto di interruzione, il codice che passa attraverso il primo bit di codice iv si trova in basso sotto l'impostazione del messaggio e l'impostazione dell'eccezione. dopo aver proseguito dopo il reindirizzamento del ritorno, la pagina successiva visualizzata è la seguente.

enter image description here

Aggiunta di punti di rottura al ErrorController e modello di errore ho scoperto che il codice non viene mai lì.

La vista che sto tentando di pubblicare è una pagina di errore. Ecco un codice per aiutarti a vedere il problema.

Il RedirectToAction:

string message; 
message = "An error has occured during the communication to lightstone, this is likely a timeout issue and could be the result of a bad connection. Please go back and try again."; 
return RedirectToAction("Error", "Error", new { ex = ex.ToString(), message = message}); 

L'azione nel mio ErrorController:

public ActionResult Error(string ex, string message) 
{ 
    ViewBag.Message = "Error"; 
    return View(new ErrorModel(ex, message)); 
} 

Il mio modello di errore:

namespace MvcResComm.Models 
{ 
    public class ErrorModel 
    { 
     public string ex { get; set; } 
     public string message { get; set; } 

     public ErrorModel(string ex, string message) 
     { 
      this.ex = ex; 
      this.message = message; 
     } 
    } 
} 
+0

È possibile controllare http://stackoverflow.com/questions/8159321/request-exceed-the-configured-maxquerystringlength-when-using-authorize per una risposta. –

+0

Ora capisco il problema, ma non ho ancora una soluzione funzionante per risolverlo. – Pomster

risposta

4

Perché non utilizzare TempData, è destinato a fare cose del genere. Ad esempio:

TempData["ErrorMessage"] = "An error has occured during the communication to lightstone, this is likely a timeout issue and could be the result of a bad connection. Please go back and try again."; 

Controllare questo link.

EDIT

passare il messaggio eccezione in questo modo:

TempData["Error"] = ex.Message(); 
TempData["ErrorMessage"] = "An error has occured during the communication to lightstone, this is likely a timeout issue and could be the result of a bad connection. Please go back and try again."; 

return RedirectToAction("Error", "Error"); 

Poi basta accedere dal tuo ErrorController, qualcosa di simile:

public ActionResult Error(string ex, string message) 
{ 
    var error = (string)TempData["Error"]; 
    // do other magic ... 
} 
+0

Grazie, farò in modo di farlo, ma penso che l'errore sia prima di ottenere il controller degli errori. L'errore si verifica dal reindirizzamento all'azione. – Pomster

+0

@Pomster mi dispiace non essere stato chiaro, controlla la mia modifica. Spero possa essere d'aiuto. –

+0

@Pomster, in realtà, non l'ho provato, ma sono abbastanza sicuro che puoi passarlo direttamente alla vista (voglio dire che puoi accedere a 'TempData [" Errore "]' direttamente nella tua vista, non lo fai devo passarlo). –

1

C'è un valore di lunghezza maxumum URL impostabile nel web. file di configurazione. Questa domanda ha un problema simile ASP.NET MVC, Url Routing: Maximum Path (URL) Length

+0

L'errore si verifica dal reindirizzamento all'azione? perché la lunghezza Url avrebbe un effetto? – Pomster

+0

Poiché la lunghezza dell'URL è un limite definito sulla dimensione della richiesta GET. Questo è fatto per garantire il supporto per i browser precedenti che non potevano gestire le lunghezze degli URL di una certa dimensione. Quando si esegue il reindirizzamento a un'azione (sul controller), viene eseguito un GET su tale azione –

+0

Grazie ok ora vedo come passerebbero queste stringhe dal controller in cui si verifica l'errore al controller degli errori, senza dover passare nell'URL? O come posso impostare la dimensione massima dell'URL? Pomster

1

In voi web.config sotto le <system.web> <httpRuntime> tag è possibile impostare il maxQueryStringLength

quindi è come

<system.web> 
    <httpRuntime 
     <maxQueryStringLength = "**MY NUMBER**" /> 
    /> 
</system.web 

check out il riferimento MSDN: http://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx

Inoltre si prega di aumentare maxQueryStringLength nella configurazione di IIS, check out:

http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

+0

Iv l'ho impostato su numeri grandi e non è successo niente? – Pomster

+0

Quanto è grande il numero? –

+0

Pomster

11

Nella radice web.config per il progetto, sotto il nodo system.web:

<system.web> 
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" /> 
... 

Inoltre, ho dovuto aggiungere questo sotto il nodo system.webServer o ho avuto un errore di sicurezza per le mie lunghe stringhe di query:

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxUrl="10999" maxQueryString="9999" /> 
     </requestFiltering> 
    </security> 
...