c# - begäran överskrider den konfigurerade maxQueryStringLength när [Authorize] används


Jag har en MVC3-webbplats i C#, jag har en viss vy som matas med förfrågningsparametrar från en JavaScript-funktion, funktionen omdirigerar till webbplatsen via

window.location.href="../ActionName?" + query_string;

query_string är den dynamiska parametersträngen för frågan som byggs av JavaScript-funktionen.

Anledningen till denna konstighet är att samma funktion ibland skickar URL:en till en ASP.Net-webbform eftersom den måste använda reportviewer-kontrollen, det alternativa är att spara några parametrar i detta fall skickas de till vyn. (Kan förklara mer om det inte är begripligt)

Allt fungerar bra tills jag introducerar [Authorize] till åtgärdsmetoden. Det kraschar om det är på plats, fungerar bra utan, och [Authorize] fungerar bra på alla andra metoder.

Hela URL:en i det här fallet är 966 tecken lång, efter forskning verkar det som att maxQueryStringLength-värdet är 2048 som standard men kan åsidosättas till vilket värde som helst av typen heltal, så bara för skojs skull lade jag till

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

nyckel till webbkonsfigurationsfilen under nyckeln.

Ingen glädje där, så jag blev löjlig och gjorde det till 4096, fortfarande ingen glädje.

Nu när hela URL:en är 966 tecken lång, kan authorize-attributet knappast lägga till ytterligare 1082-3130 tecken, så hur kan jag ta reda på vad felet faktiskt är, eller varför inställningen inte träder i kraft.

VS2010 Pro SP1

Svar #1

I roten web.config för ditt projekt, under system.web-noden:

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

Dessutom var jag tvungen att lägga till detta under system.webServer-noden annars fick jag ett säkerhetsfel för mina långa frågesträngar:

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

Svar #2

När en obehörig begäran kommer in, kodas hela begäran i URL-format och läggs till som en fråga-sträng till begäran till auktoriseringsformuläret, så jag kan se var detta kan resultera i ett problem givet din situation.

Enligt MSDN är det korrekta elementet att ändra för att återställa maxQueryStringLength i web.config <httpRuntime>-elementet inuti <system.web>-elementet, se httpRuntime Element (ASP.NET Settings Schema). Försök att ändra det elementet.

Relaterade artiklar