Saya memiliki proyek yang mengharuskan URL saya memiliki titik di jalur. Misalnya saya dapat memiliki URL seperti www.example.com/people/michael.phelps
URL dengan titik menghasilkan 404. Rute saya baik-baik saja. Jika saya melewati michaelphelps, tanpa titik, maka semuanya berfungsi. Jika saya menambahkan titik saya mendapatkan kesalahan 404. Situs sampel dijalankan pada Windows 7 dengan IIS8 Express. URLScan tidak berjalan.
Saya mencoba menambahkan yang berikut ke web.config saya:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Sayangnya itu tidak membuat perbedaan. Saya baru saja menerima kesalahan 404.0 Tidak Ditemukan.
Ini adalah proyek MVC4 tapi saya pikir itu tidak relevan. Routing saya berfungsi dengan baik dan parameter yang saya harapkan ada di sana, sampai mereka menyertakan titik.
Apa yang harus saya konfigurasi agar saya dapat memiliki titik-titik di URL saya?
sumber
Jawaban:
Saya mendapatkan ini berfungsi dengan mengedit handler HTTP situs saya. Untuk kebutuhan saya ini berfungsi dengan baik dan menyelesaikan masalah saya.
Saya hanya menambahkan handler HTTP baru yang mencari kriteria jalur tertentu. Jika permintaan cocok, itu dikirim dengan benar ke .NET untuk diproses. Saya jauh lebih bahagia dengan solusi ini bahwa URLRewrite meretas atau mengaktifkan RAMMFAR.
Misalnya, agar .NET memproses URL www.example.com/people/michael.phelps menambahkan baris berikut ke web.config situs Anda di dalam
system.webServer / handlers
elemen:Edit
Ada posting lain yang menunjukkan bahwa solusi untuk masalah ini adalah
RAMMFAR
atauRunAllManagedModulesForAllRequests
. Mengaktifkan opsi ini akan mengaktifkan semua modul yang dikelola untuk semua permintaan. Itu berarti file statis seperti gambar, PDF, dan yang lainnya akan diproses oleh .NET ketika tidak diperlukan. Opsi ini sebaiknya tidak digunakan kecuali Anda memiliki kasus khusus untuk itu.sumber
Setelah beberapa mengaduk-aduk saya menemukan bahwa relaxingUrlToFileSystemMapping tidak berfungsi sama sekali bagi saya, apa yang berhasil dalam kasus saya adalah pengaturan RAMMFAR menjadi true, hal yang sama berlaku untuk (.net 4.0 + mvc3) dan (.net 4.5 + mvc4).
Berhati-hatilah saat mengatur RAMMFAR posting Hanselman tentang RAMMFAR dan kinerja
sumber
Saya percaya Anda harus mengatur properti santaiUrlToFileSystemMapping di web.config Anda. Haack menulis artikel tentang ini beberapa waktu yang lalu (dan ada beberapa posting SO lainnya yang menanyakan jenis pertanyaan yang sama)
Edit Dari komentar di bawah ini, versi .NET / IIS yang lebih baru mungkin mengharuskan ini ada di
system.WebServer
elemen.sumber
Saya terjebak pada masalah ini untuk waktu yang lama mengikuti semua solusi yang berbeda tanpa hasil.
Saya perhatikan bahwa ketika menambahkan garis miring [/] ke akhir URL yang berisi titik [.], Itu tidak menghasilkan kesalahan 404 dan itu benar-benar berfungsi.
Saya akhirnya menyelesaikan masalah menggunakan penulis ulang URL seperti IIS URL Rewrite untuk melihat pola tertentu dan menambahkan garis miring pelatihan.
URL saya terlihat seperti ini: /Contact/~firstname.lastname jadi polanya hanya: /Contact/~(.*[^/[)$
Saya mendapatkan ide ini dari Scott Forsyth, lihat tautan di bawah ini: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
sumber
Cukup tambahkan bagian ini ke Web.config, dan semua permintaan ke rute / {* pathInfo} akan ditangani oleh penangan yang ditentukan, bahkan ketika ada titik di pathInfo. (diambil dari contoh Web.config Host Host.Config dan jawaban ini https://stackoverflow.com/a/12151501/801189 )
Ini harus bekerja untuk IIS 6 & 7. Anda dapat menetapkan penangan spesifik ke jalur yang berbeda setelah 'rute' dengan memodifikasi jalur = "*" di elemen 'tambah'
sumber
Penanganan masalah MVC 5.0.
Banyak jawaban yang disarankan tampaknya tidak berfungsi di MVC 5.0.
Karena masalah 404 dot di bagian terakhir dapat diselesaikan dengan menutup bagian itu dengan garis miring, inilah trik kecil yang saya gunakan, bersih dan sederhana.
Sambil menjaga placeholder yang nyaman dalam pandangan Anda:
tambahkan sedikit jquery / javascript untuk menyelesaikan pekerjaan:
harap perhatikan garis miring, yang bertanggung jawab untuk mengubah
ke
sumber
Jawaban super mudah bagi mereka yang hanya memiliki ini pada satu halaman web. Edit tautan tindakan Anda dan tanda + "/" di bagian akhir.
sumber
Anda mungkin ingin berpikir tentang menggunakan tanda hubung bukan titik.
Dalam Pro ASP MVC 3 Framework mereka menyarankan ini tentang membuat URL yang ramah:
Itu juga menyebutkan bahwa URL harus mudah dibaca dan diubah untuk manusia. Mungkin alasan untuk berpikir tentang menggunakan tanda hubung bukan titik juga berasal dari buku yang sama:
Jadi, sementara suatu periode masih dapat dibaca oleh manusia (meskipun kurang dapat dibaca daripada garis, IMO), itu mungkin masih sedikit membingungkan / menyesatkan tergantung pada apa yang datang setelah periode. Bagaimana jika seseorang memiliki nama belakang zip? Maka URL akan menjadi / John.zip bukan / John-zip, sesuatu yang bisa menyesatkan bahkan untuk pengembang yang menulis aplikasi.
sumber
.
) dengan tanda hubung di url penggunanya: PBergantung pada betapa pentingnya bagi Anda untuk menjaga URI Anda tanpa querystrings, Anda juga bisa hanya memberikan nilai dengan titik-titik sebagai bagian dari querystring, bukan URI.
Misalnya www.example.com/people?name=michael.phelps akan berfungsi, tanpa harus mengubah pengaturan apa pun.
Anda kehilangan keanggunan memiliki URI bersih, tetapi solusi ini tidak perlu mengubah atau menambahkan pengaturan atau penangan.
sumber
Apakah mungkin mengubah struktur URL Anda?
Untuk apa saya sedang mengerjakan saya mencoba rute
tetapi gagal dengan apa pun yang memiliki. di dalamnya.
Saya beralih rute ke
Sekarang saya bisa memasukkan
localhost:xxxxx/File1.doc/Download
dan berfungsi dengan baik.Pembantu saya dalam tampilan juga mengambilnya
yang membuat tautan ke
localhost:xxxxx/File1.doc/Download
format juga.Mungkin Anda bisa meletakkan kata yang tidak dibutuhkan seperti "/ view" atau tindakan di akhir rute Anda sehingga properti Anda dapat diakhiri dengan
/
sesuatu yang tertinggal seperti/mike.smith/view
sumber
Ini sesederhana mengubah path = " ." ke jalur = " ". Hapus saja titik di jalur untuk ExensionlessUrlHandler-Integrated-4.0 di web.config.
Berikut adalah artikel yang bagus https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
sumber
Sudah mencoba semua solusi di atas, tetapi tidak ada yang bekerja untuk saya. Apa yang berhasil adalah saya mencopot pemasangan .NET versi> 4.5, termasuk semua versi multibahasanya; Akhirnya saya menambahkan versi yang lebih baru (hanya bahasa Inggris) sepotong demi sepotong. Sekarang versi yang diinstal pada sistem saya adalah ini:
Dan masih bekerja pada saat ini. Saya takut menginstal 4.6.2 karena mungkin mengacaukan semuanya.
Jadi saya hanya bisa berspekulasi bahwa 4.6.2 atau semua versi non-Inggris itu mengacaukan konfigurasi saya.
sumber
Saya dapat menyelesaikan versi khusus masalah ini (harus membuat /customer.html rute ke / pelanggan, tidak mengikuti garis miring) menggunakan solusi di https://stackoverflow.com/a/13082446/1454265 , dan mengganti jalur = "*. html".
sumber
Sebagai solusi juga dapat mempertimbangkan pengkodean ke format yang tidak mengandung simbol
.
, seperti base64.Dalam js harus ditambahkan
Di controller
sumber
Tambahkan aturan penulisan ulang URL ke arsip Web.config. Anda harus sudah menginstal modul URL Rewrite di IIS. Gunakan aturan penulisan ulang berikut sebagai inspirasi untuk Anda sendiri.
sumber
Juga, (terkait) periksa urutan pemetaan pawang Anda. Kami memiliki .ashx dengan .svc (mis. /Foo.asmx/bar.svc/path) di jalur setelahnya. Pemetaan .svc pertama kali jadi 404 untuk jalur .svc yang cocok dengan sebelum .asmx. Aku tidak berpikir terlalu banyak, tetapi mungkin url yang mengkodekan jalan akan membereskan ini.
sumber
sumber