Mam witrynę MVC3 w C #, mam określony widok, który jest podawany z parametrami zapytania z funkcji JavaScript, funkcja przekierowuje do witryny za pośrednictwem
window.location.href = "../ActionName?" + query_string;
query_string to ciąg dynamicznych parametrów zapytania utworzony przez funkcję JavaScript.
Przyczyną tej dziwności jest to, że czasami ta sama funkcja przekazuje adres URL do formularza internetowego ASP.Net, ponieważ musi używać kontrolki reportviewer , alternatywną akcją jest zapisanie niektórych parametrów w tym przypadku przekazuje je do widoku. (Może rozwinąć więcej, jeśli to nie ma sensu)
Całość działa dobrze, dopóki nie wprowadzę [Authorize] do metody akcji. Przerywa, jeśli jest na miejscu, działa dobrze bez, a [Autoryzuj] działa dobrze na wszystkich innych metodach.
Cały adres URL w tym przypadku ma długość 966 znaków, po badaniach wydaje się, że wartość maxQueryStringLength to domyślnie 2048, ale można ją zastąpić dowolną wartością typu integer, więc tylko dla uśmiechów dodałem
<security>
<requestFiltering>
<requestLimits maxQueryString="2048"></requestLimits>
</requestFiltering>
</security>
key do pliku konfiguracji sieciowej pod kluczem.
Żadnej radości, więc stałem się śmieszny i zrobiłem to 4096, nadal nie ma radości.
Teraz, gdy cały adres URL ma długość 966 znaków, atrybut autoryzacji nie może poważnie dodawać kolejnych 1082-3130 znaków, więc jak mogę określić, na czym właściwie polega błąd lub dlaczego ustawienie nie działa.
VS2010 Pro z dodatkiem SP1
źródło
Odpowiedzi:
Gdy przychodzi nieautoryzowane żądanie, całe żądanie jest kodowane w adresie URL i dodawane jako ciąg zapytania do żądania w formularzu autoryzacji, dzięki czemu mogę zobaczyć, gdzie może to spowodować problem w Twojej sytuacji.
Według MSDN prawidłowym elementem do zmodyfikowania w celu zresetowania wartości maxQueryStringLength w pliku web.config jest
<httpRuntime>
element wewnątrz<system.web>
elementu, zobacz element httpRuntime (schemat ustawień ASP.NET) . Spróbuj zmodyfikować ten element.źródło
W katalogu głównym
web.config
projektu, podsystem.web
węzłem:Ponadto musiałem dodać to pod
system.webServer
węzłem lub otrzymałem błąd bezpieczeństwa dla moich długich ciągów zapytań:źródło
maxQueryString
jest długością w bajtach jako uint z maksymalną wartością 4294967295 imaxQueryStringLength
jest długością w znakach, jak int, ale z zakresem 0-2097151.Dla każdego, kto może napotkać ten problem i nie można go rozwiązać żadną z powyższych opcji, to zadziałało.
Wyłączyłem to, ponieważ używaliśmy własnego Auth, ale to prowadziło do tego samego problemu, a zaakceptowana odpowiedź w żaden sposób nie pomogła.
źródło
Mam ten błąd przy użyciu datatables.net
naprawiłem zmianę domyślnego ajax Get to POST we właściwościach DataTable ()
źródło