Web.config dosyasını her uzunluktaki isteklere izin verecek şekilde yapılandırma


138

Bir textarea öğesinin değerinden bir dosya istemci tarafı oluşturmak istediğiniz bir site inşa ediyorum.

Bunu yapmak için kod var, ama bu hatayı alıyorum

HTTP Hatası 404.15 - Bulunamadı İstek filtreleme modülü, sorgu dizesinin çok uzun olduğu bir isteği reddedecek şekilde yapılandırılmıştır.

Herhangi bir boyuttaki istekleri işleyebilmek için bunu geçersiz kılmanın bir yolu var mı?

Değilse, filesystem / active x nesnesini kullanmadan dosyalar istemci tarafı oluşturmanın bir yolu var mı?

Teşekkürler


8
Göz önünde bulundurmak istediğiniz şey, sorgu dizesi uzunluğu IIS veya uygulamanız için yapılandırılabilir olsa da, URL uzunluğu için bir HTTP standardı vardır. Bir sorgu dizesi kullandığınız için değerleri URL'nin bir parçası olarak geçiriyorsunuz. Maksimum URL karakter uzunluğu 2000 karakterdir. Değerleriniz uzun dizeler olacaksa, değerleri sorgu dizesine iletmek yerine POST yapmak en iyisidir.
Jeff LaFay

2
Jlafay ile aynı fikirde. 2-3'ten fazla basit parametreniz olduğunda değerleri POST etmek en iyi uygulamadır. ve sorgu dizesini kullandığınızda bunları şifrelediğinizden emin olun.
Jack

Yanıtlar:


244

Aşağıdakileri web.config dosyanıza ekleyin:

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

Görmek:

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

Yorumları yansıtacak şekilde güncellendi.

requestFiltering için requestLimits Öğesi [IIS Ayarları Şeması]

Aşağıdakileri web.config dosyasına da eklemeniz gerekebilir

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

Bkz. HttpRuntime Öğesi (ASP.NET Ayarları Şeması)

Tabii ki yukarıdaki yapılandırma ayarlarındaki sayılar (32768 ve 65536) sadece örnektir. Bu kesin değerleri kullanmak zorunda değilsiniz.


24
Sadece bu benim için yeterli değildi. Bunu da system.web bölümüne eklemek zorunda kaldım: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick

2
nnn, izin vermek istediğiniz maksimum dize uzunluğudur, örneğin 32768
Matt Varblow


Her birini ayrı ayrı denedim, system.webServer altındaki güvenlik düğümünü ayarlayıp ardından yalnızca httpRuntime düğümüne öznitelikleri ekleyerek denedim. Her ikisinin de çalışması için kesinlikle ihtiyacım vardı. Çok teşekkürler!
David Gunderson

2
Not: <httpRuntime> etiketi <system.web> altına girer : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay

33

Benim durumumda (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 uygulaması / .Net Framework 4.5) 30 dakikalık deneme ve hatadan sonra gerçekten işe yarayan şey maxQueryStringLength, <httpRuntime>etiketteki özelliği ayarlıyordu :

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

maxQueryStringLengthvarsayılan olarak 2048.

Burada daha fazlası:

İzin Verilen URL Aralığını Genişletme


@MattVarblow önerdiği <system.webServer>gibi ayarlamayı denedim , ama işe yaramadı ... ve bunun nedeni, Windows 8 ile dev makinemde IIS Express (IIS 8 tabanlı) kullanıyorum.

Uygulamamı üretim ortamına dağıttığımda (IIS 7 ile Windows Server 2008 R2), IE 10, uzun sorgu dizeleri olan AJAX isteklerinde 404 hata döndürmeye başladı. Sonra sorunun sorgu dizesi ile ilgili olduğunu düşündüm ve @ MattVarblow'un cevabını denedim. Sadece IIS 7 üzerinde çalıştı. :)


2
Benim için büyüyü sağlayan enable = "true" idi :)
Johann Combrink

6

Kontrol edilecek başka bir şey var: Siteniz MVC kullanıyorsa, oturum açma denetleyici sınıfınıza [Yetkilendir] eklediyseniz bu olabilir. Oturum açma yöntemine erişemiyor çünkü yetkilendirilmediğinden oturum açma yöntemine -> boom'a yönlendiriyor.


Teşekkürler! Bu sorunu yaşadım çünkü Menü / Navigasyon'u kısmi bir görünüme ve anonim bağlantılara izin vermeyen başka bir Denetleyiciye taşıdım.
Westerlund.io

Hata mesajının doğru olmasına rağmen, gerçek sorunla hiçbir ilişkisi yoktur.
Steve Smith

1
Ayrıca Windows Kimlik Doğrulamasının “Etkin” ve Anonim Kimlik Doğrulamasının Devre Dışı Bırakılmış olması gibi proje özelliklerine de göz atın. Pls bu ayrıntılı makaleye göz atın - Hata (Visual Studio 2013, MVC5): İstek filtreleme modülü, sorgu dizesinin çok uzun olduğu bir isteği reddedecek şekilde yapılandırılmış
fujiFX

5

IIS 8.5 web sunucusu çalıştırırken bu sorunla karşılaşırsanız, aşağıdaki yöntemi kullanabilirsiniz.

İlk olarak, üzerinde çalıştığınız IIS sitesinde "İstek Filtreleme" modülünü bulun , ardından çift tıklayın ...

resim açıklamasını buraya girin

Ardından, aşağıda gösterilen beyaz alanı sağ tıklamanız ve ardından "Özellik Ayarlarını Düzenle" adlı bağlam menüsü seçeneğini tıklamanız gerekir .

resim açıklamasını buraya girin

Daha sonra yapılacak son şey, "Maksimum sorgu dizesi (Bayt)" değerini 2048'den , ihtiyaçlarınız için 5000 gibi daha uygun bir şeye dönüştürmektir .

resim açıklamasını buraya girin


0

IIS 8'e ASP Web Uygulaması dağıtmaya çalışırken de benzer bir sorun yaşadım. Bunu düzeltmek için Matt ve Leniel yukarıda önerildiği gibi yaptım. Ancak, Anonim Kimlik Doğrulamasını etkinleştirmek için sitemin Kimlik Doğrulama ayarını da yapılandırmak zorunda kaldım. Ve bu benim için çalıştı.


0

Kullanıcının henüz kimliği doğrulanmadığı için giriş sayfamdaki ActionResult işlevlerine [AllowAnonymous] eklemek zorunda kaldım.


0

Web siteniz kimlik doğrulama kullanıyorsa, ancak IIS'de doğru kimlik doğrulama yönteminiz (ör. Temel, Formlar vb.) Ayarlanmamışsa, tarayıcı bir yönlendirme döngüsünde takılı kalır. Bu, yönlendirme URL'sinin patlayana kadar gittikçe uzamasına neden olur.


0

Ayrıca ajax çağrı parametresinde büyük dize geçirdiğinizde hata üretecektir.

Bu nedenle, her zaman için ajax'taki yazı türü sorununuzu% 100 çözer ve web.config'de uzunluğu ayarlamanıza gerek yoktur.

// var UserId = 1000 kullanıcı kimliği dizisi

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


-1

HTTP Hatası 404.15 - Bulunamadı İstek filtreleme modülü, sorgu dizesinin çok uzun olduğu bir isteği reddedecek şekilde yapılandırılmıştır.

Bu sorunu gidermek için <a0> </a0>, Formetiketi bir özelliği methodolsun / ayar durumu olup olmadığını kaynak kodunu denetleyin .

Öyleyse, methodmülk kaldırılmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.