2013-07-11 14 views
8

Próbuję przekierować do widoku i nadal otrzymuję komunikat o błędzie zamieszczony w tytule pytania.Długość ciągu zapytania dla tego żądania przekracza skonfigurowaną wartość maxQueryStringLength

Podczas testowania punktu przerwania kod przechodzący przez pierwszy bit kodu iv określa poniżej ustawienie komunikatu i ustawienie wyjątku. po kontynuowaniu po przekierowaniu powrotnym następna wyświetlana strona wygląda następująco.

enter image description here

Dodawanie punktów przerwie w ErrorController i modelu błędu i stwierdzili, że kod nie trafia tam.

Widok, który próbuję opublikować, jest stroną błędu. Oto kod, który pomoże Ci zobaczyć problem.

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}); 

Akcja w moim ErrorController:

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

Mój model Błąd:

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

Możesz sprawdzić http://stackoverflow.com/questions/8159321/request-exceeds-configured-maxquerystringlength-when-using-authorize w celu uzyskania odpowiedzi. –

+0

Rozumiem teraz problem, ale nadal nie mam działającego rozwiązania, by to naprawić. – Pomster

Odpowiedz

4

Dlaczego nie używasz TempData, ma to na celu zrobienie czegoś takiego. Na przykład:

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."; 

Sprawdź to link.

EDIT

przekazywania wiadomości wyjątku tak:

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"); 

Wtedy właśnie do niego dostęp z ErrorController, coś takiego:

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

Dzięki, zrobię to, ale myślę, że błąd jest zanim dostanę do kontrolera błędu. Błąd występuje od przekierowania do działania. – Pomster

+0

@Pomster przepraszam, że nie było jasne, sprawdź moją edycję. Mam nadzieję, że to pomoże. –

+0

@Pomster, Właściwie to nie testowałem tego, ale jestem prawie pewien, że możesz przekazać go bezpośrednio do widoku (mam na myśli to, że możesz uzyskać dostęp do 'TempData [" Błąd "]' bezpośrednio w widoku, nie musisz trzeba to przekazać). –

1

Jest długość wartość maxumum URL ustawiane w internecie. plik konfiguracyjny. To pytanie ma podobny problem: ASP.NET MVC, Url Routing: Maximum Path (URL) Length

+0

Błąd występuje z przekierowania do działania? dlaczego długość adresu URL ma wpływ? – Pomster

+0

Ponieważ długość adresu URL jest zdefiniowanym ograniczeniem rozmiaru żądania GET. Odbywa się to w celu zapewnienia obsługi wcześniejszych przeglądarek, które nie są w stanie obsłużyć długości adresów URL przekraczających określony rozmiar. Kiedy przekierujemy się do akcji (na kontrolerze), robi to GET na tej akcji –

+0

Dzięki, ok, widzę teraz, jak mógłbym przekazać te ciągi z jednego kontrolera, w którym błąd wystąpił do kontrolera błędu, bez konieczności przejścia to w adresie URL? Lub jak ustawić maksymalny rozmiar adresu URL? Pomster

1

w was internecie.config pod <system.web> <httpRuntime> tagów można ustawić maxQueryStringLength

więc jej jak

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

Sprawdź odniesienia MSDN: http://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx

Także proszę zwiększyć maxQueryStringLength w konfiguracji IIS, sprawdź:

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

+0

Iv ustawić to na dużą liczbę i nic się nie stało? – Pomster

+0

Jak duża jest liczba? –

+0

Pomster

11

w korzeniu web.config swojego projektu, pod system.web węzła:

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

Ponadto, musiałem dodać to w węźle system.webServer lub Dostałem błąd zabezpieczeń dla moich długich ciągów zapytań:

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxUrl="10999" maxQueryString="9999" /> 
     </requestFiltering> 
    </security> 
... 
Powiązane problemy