Saya bekerja dengan ASP.NET MVC 4 WebApi dan saya bersenang-senang menjalankannya di komputer lokal saya di IIS Express. Saya telah mengkonfigurasi IIS Express untuk melayani mesin jarak jauh juga, dan yang lain di perusahaan saya menggunakan komputer saya sebagai server web kami.
Setelah memutuskan ini adalah solusi yang kurang optimal, kami memutuskan untuk meletakkan WebApi di server jauh setelah menginstal .NET 4.5. Ketika saya menggunakan fiddler dan mengirim POST ke controller di komputer lokal saya, ia mengembalikan respons yang benar, namun ketika saya mengubah domain ke server web yang menjalankan IIS7 POST yang sama mengembalikan cryptic
{"message": "telah terjadi kesalahan"}
pesan. Adakah yang tahu apa yang sedang terjadi?
Jawaban:
Masalahnya adalah ketergantungan yang hilang yang tidak ada di server tetapi pada mesin lokal saya. Dalam kasus kami, itu adalah dll Devart.Data.Linq.
Untuk mendapatkan jawaban itu, saya mengaktifkan penelusuran IIS untuk 500 kesalahan. Itu memberi sedikit informasi, tetapi hal yang benar-benar membantu ada di web.config menetapkan
<system.web><customErrors mode="Off"/></system.web>
Ini menunjuk ke hilangnya ketergantungan yang dimuat secara dinamis. Setelah menambahkan ketergantungan ini dan menyuruhnya untuk disalin secara lokal, server mulai bekerja.sumber
mode="RemoteOnly"
dan jika Anda menjalankan halaman pada server web pada server Anda juga akan melihat kesalahan tanpa membahayakan keamanan jika sisa situs dapat diakses secara eksternalPada dasarnya:
Gunakan
IncludeErrorDetailPolicy
sebaliknya jikaCustomErrors
tidak menyelesaikannya untuk Anda (mis. Jika Anda ASP.NET stack> 2012):Catatan: Hati-hati mengembalikan info kesalahan terperinci dapat mengungkapkan informasi sensitif ke 'peretas'. Lihat komentar Simon pada jawaban di bawah ini.
TL; versi DR
Bagi saya
CustomErrors
tidak terlalu membantu. Sudah diatur keOff
, tapi saya masih mendapatan error has occurred
pesan sangat sedikit . Saya kira jawaban yang diterima adalah dari 3 tahun yang lalu yang sudah lama ada di web word saat ini. Saya menggunakan Web API 2 dan ASP.NET 5 (MVC 5) dan Microsoft telah beralih dari strategi hanya-IIS, sedangkanCustomErrors
skool IIS lama;).Lagi pula, saya punya masalah pada produksi yang tidak saya miliki secara lokal. Dan kemudian menemukan saya tidak bisa melihat kesalahan di tab Jaringan Chrome seperti yang saya bisa di mesin dev saya. Pada akhirnya saya berhasil menyelesaikannya dengan memasang Chrome di server produksi saya dan kemudian menjelajah ke aplikasi yang ada di server itu sendiri (misalnya di 'localhost'). Kemudian kesalahan yang lebih rinci muncul dengan tumpukan jejak dan semuanya.
Baru setelah itu saya menemukan artikel ini dari Jimmy Bogard (Catatan: Jimmy is mr. AutoMapper! ). Yang lucu adalah bahwa artikelnya juga berasal dari 2012, tetapi di dalamnya dia sudah menjelaskan bahwa
CustomErrors
tidak membantu untuk ini lagi, tetapi bahwa Anda BISA mengubah 'Rincian kesalahan' dengan mengatur yang berbedaIncludeErrorDetailPolicy
dalam konfigurasi WebApi global (misalnyaWebApiConfig.cs
):Untungnya dia juga menjelaskan cara mengaturnya bahwa webapi (2) TIDAK mendengarkan
CustomErrors
pengaturan Anda . Itu pendekatan yang cukup masuk akal, dan ini memungkinkan Anda untuk kembali ke 2012: P.Catatan: Nilai default adalah 'LocalOnly', yang menjelaskan mengapa saya bisa menyelesaikan masalah seperti yang saya jelaskan, sebelum menemukan posting ini. Tapi saya mengerti bahwa tidak semua orang bisa hanya jauh untuk produksi dan memulai browser (saya tahu saya kebanyakan tidak bisa sampai saya memutuskan untuk pergi lepas dan DevOps).
sumber
if (DateTime.Now < new DateTime(2017, 6, 22)) { .... }
mengatur opsi seperti ini. Lalu saya bisa mengujinya dalam produksi dan besok itu secara ajaib akan kembali ke perilaku normal jika saya lupa menonaktifkannya.Tidak ada jawaban lain yang bekerja untuk saya.
Ini berhasil: (di Startup.cs)
(atau Anda dapat meletakkannya di WebApiConfig.cs):
sumber
Saya selalu datang ke pertanyaan ini ketika saya menemukan kesalahan di lingkungan pengujian dan ingat, "Saya pernah melakukan ini sebelumnya, tapi saya bisa melakukannya langsung di web.config tanpa harus mengubah kode dan menggunakan kembali ke lingkungan pengujian , tapi butuh 2 perubahan ... apa itu lagi? "
Untuk referensi di masa mendatang
DAN
sumber
Saya memiliki masalah yang sama ketika memposting ke titik akhir WebAPI. Dengan memutar CustomErrors = Off, saya dapat melihat kesalahan aktual yang merupakan salah satu dll hilang.
sumber
Dalam hal ini membantu siapa pun:
Saya memiliki masalah yang sama, dan mengikuti instruksi Nates saya menambahkan:
Ini menunjukkan kepada saya informasi lebih lanjut tentang kesalahan:
Ini adalah ketika saya ingat bahwa saya telah memindahkan file edmx ke lokasi yang berbeda dan lupa untuk mengubah node connectionstrings di konfigurasi (node koneksistrings ditempatkan di file terpisah menggunakan "configSource", tapi itu cerita lain).
sumber
File XML angkuh saya tidak digunakan ke \ bin:
http://wmpratt.com/swagger-and-asp-net-web-api-part-1/
Itu harus diatur dalam Konfigurasi Rilis serta di Konfigurasi Debug.
sumber
Jika ada
<deployment retail="true"/>
di machine.config .NET Framework Anda, Anda tidak akan melihat pesan kesalahan terperinci. Pastikan bahwa pengaturan itu salah, atau tidak ada.sumber
Jadi saya mencoba semua solusi yang disarankan tetapi tidak berhasil. Yang saya lakukan adalah mengatur menjalankan aplikasi dari server dan itu menampilkan kesalahan secara penuh, ini seharusnya bekerja ketika saya mengatur mode customErrors ke false tetapi tidak. Saat saya melihat-lihat bentuk API server saya bisa melihat masalah.
sumber