Cara mengkonfigurasi web.config untuk mengizinkan permintaan dengan panjang berapa pun


146

Saya sedang membangun situs di mana saya ingin membuat sisi klien file dari nilai elemen textarea.

Saya memiliki kode untuk melakukan ini, tetapi saya mendapatkan kesalahan ini

Kesalahan HTTP 404.15 - Tidak Ditemukan Modul pemfilteran permintaan dikonfigurasi untuk menolak permintaan yang string kueri terlalu panjang.

Adakah cara untuk menimpanya sehingga saya dapat memproses permintaan dengan ukuran berapa pun?

Jika tidak, apakah ada cara untuk menghasilkan file sisi klien tanpa menggunakan filesystem / objek x aktif?

Terima kasih


8
Yang ingin Anda pertimbangkan adalah bahwa meskipun panjang string kueri dapat dikonfigurasi untuk IIS atau aplikasi Anda, ada standar HTTP untuk panjang URL. Karena Anda menggunakan string kueri, Anda meneruskan nilai sebagai bagian dari URL. Panjang karakter URL maks adalah 2000 karakter. Jika nilai Anda akan menjadi string yang panjang, akan lebih baik untuk POST nilai daripada meneruskannya dalam string kueri.
Jeff LaFay

2
Setuju dengan Jlafay. Praktik terbaik untuk POST nilai ketika Anda memiliki lebih dari 2-3 parameter sederhana. dan saat Anda menggunakan string kueri, pastikan untuk mengenkripsinya.
Jack

Jawaban:


253

Tambahkan berikut ini ke web.config Anda:

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

Lihat:

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

Diperbarui untuk mencerminkan komentar.

Elemen requestLimits untuk requestFiltering [Skema Pengaturan IIS]

Anda mungkin harus menambahkan berikut ini di web.config Anda juga

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

Lihat: httpRuntime Element (ASP.NET Settings Schema)

Tentu saja angka (32768 dan 65536) dalam pengaturan konfigurasi di atas hanyalah contoh. Anda tidak harus menggunakan nilai persis tersebut.


24
Itu saja tidak cukup bagiku. Saya juga harus menambahkan ini ke bagian system.Web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick

2
nnn adalah panjang string maksimum yang Anda izinkan, misalnya 32768
Matt Varblow


Saya mencoba masing-masing satu per satu, mengatur node keamanan di bawah system.webServer dan kemudian menghapus dan hanya menambahkan atribut ke node httpRuntime. Saya pasti membutuhkan keduanya untuk bekerja. Terimakasih banyak!
David Gunderson

2
Catatan: tag <httpRuntime> berada di bawah <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay

34

Dalam kasus saya (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .Net Framework 4.5) apa yang benar-benar berfungsi setelah 30 menit trial and error adalah menyetel maxQueryStringLengthproperti di <httpRuntime>tag:

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

maxQueryStringLengthdefault ke 2048.

Lebih lanjut tentang itu di sini:

Memperluas Rentang URL yang Diizinkan


Saya mencoba mengaturnya <system.webServer>seperti yang disarankan @MattVarblow , tetapi tidak berhasil ... dan ini karena saya menggunakan IIS Express (berdasarkan IIS 8) pada mesin dev saya dengan Windows 8.

Ketika saya menerapkan aplikasi saya ke lingkungan produksi (Windows Server 2008 R2 dengan IIS 7), IE 10 mulai mengembalikan kesalahan 404 dalam permintaan AJAX dengan string kueri yang panjang. Kemudian saya berpikir bahwa masalahnya terkait dengan string kueri dan mencoba jawaban @ MattVarblow. Ini baru saja bekerja di IIS 7. :)


2
Bagi saya itu adalah enable = "true" yang membuat keajaiban terjadi :)
Johann Combrink

6

Hal lain untuk diperiksa: jika situs Anda menggunakan MVC, ini dapat terjadi jika Anda menambahkan [Otorisasi] ke kelas pengontrol login Anda. Itu tidak dapat mengakses metode login karena tidak berwenang sehingga dialihkan ke metode login -> boom.


Terima kasih! Saya mengalami masalah ini karena saya memindahkan Menu / Navigasi ke tampilan parsial dan Pengontrol lain yang tidak mengizinkan koneksi anonim.
Westerlund.io

Kasus lain di mana pesan kesalahan, meskipun benar, tidak ada hubungannya dengan masalah sebenarnya.
Steve Smith

1
Juga periksa properti proyek karena bisa jadi Otentikasi Windows "Diaktifkan" dan Otentikasi Anonim Dinonaktifkan ". Silakan periksa artikel mendetail ini - Kesalahan (Visual Studio 2013, MVC5): Modul pemfilteran permintaan dikonfigurasi untuk menolak permintaan di mana string kueri terlalu panjang
fujiFX

5

Jika Anda mengalami masalah ini saat menjalankan server web IIS 8.5 Anda dapat menggunakan metode berikut ini.

Pertama, temukan modul "Request Filtering" di situs IIS yang sedang Anda kerjakan, lalu klik dua kali ...

masukkan deskripsi gambar di sini

Selanjutnya, Anda perlu mengklik kanan di area putih yang ditunjukkan di bawah ini, lalu klik opsi menu konteks yang disebut "Edit Pengaturan Fitur" .

masukkan deskripsi gambar di sini

Kemudian hal terakhir yang harus dilakukan adalah mengubah nilai "String kueri maksimum (Bytes)" dari 2048 menjadi sesuatu yang lebih sesuai seperti 5000 untuk kebutuhan Anda.

masukkan deskripsi gambar di sini


0

Saya memiliki masalah serupa saat mencoba menerapkan Aplikasi Web ASP ke IIS 8. Untuk memperbaikinya, saya melakukan seperti yang disarankan Matt dan Leniel di atas. Tetapi juga harus mengkonfigurasi pengaturan Otentikasi situs saya untuk mengaktifkan Otentikasi Anonim. Dan itu berhasil untuk saya.


0

Saya harus menambahkan [AllowAnonymous] ke fungsi ActionResult di halaman login saya karena pengguna tersebut belum diautentikasi.


0

Jika situs web Anda menggunakan otentikasi, tetapi Anda tidak memiliki metode otentikasi yang benar yang disiapkan di IIS (misalnya Dasar, Formulir, dll.) Maka browser akan terjebak dalam loop pengalihan. Ini menyebabkan url pengalihan menjadi semakin lama hingga meledak.


Bagaimana cara memperbaikinya?
Yster

1
@Yster Anda harus mengatur metode otentikasi Anda agar diatur dengan benar. (Akan ada opsi di suatu tempat di rawa pengaturan dan opsi IIS).
Steve Smith

0

Ini juga akan menghasilkan kesalahan ketika Anda melewatkan string besar dalam parameter panggilan ajax.

jadi untuk itu selalu gunakan jenis posting di ajax akan menyelesaikan masalah Anda 100% dan tidak perlu mengatur panjangnya di web.config.

// var UserId = larik 1000 id pengguna

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


-1

Kesalahan HTTP 404.15 - Tidak Ditemukan Modul pemfilteran permintaan dikonfigurasi untuk menolak permintaan yang string kueri terlalu panjang.

Untuk mengatasi masalah ini, periksa di kode sumber apakah Formtag memiliki properti dalam methodstatus get / set.

Jika demikian, methodproperti itu harus disingkirkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.