Saya bertanya-tanya bagaimana saya bisa mencapai validasi model dengan ASP.NET Web API. Saya memiliki model saya seperti ini:
public class Enquiry
{
[Key]
public int EnquiryId { get; set; }
[Required]
public DateTime EnquiryDate { get; set; }
[Required]
public string CustomerAccountNumber { get; set; }
[Required]
public string ContactName { get; set; }
}
Saya kemudian memiliki tindakan Posting di Pengontrol API saya:
public void Post(Enquiry enquiry)
{
enquiry.EnquiryDate = DateTime.Now;
context.DaybookEnquiries.Add(enquiry);
context.SaveChanges();
}
Bagaimana cara menambahkan if(ModelState.IsValid)
dan kemudian menangani pesan kesalahan untuk diteruskan ke pengguna?
c#
asp.net-web-api
CallumVass
sumber
sumber
System.Net.Http
,System.Net
System.Web.Http.Controllers
danSystem.Web.Http.Filters
.IncludeErrorDetailPolicy.Always
akan menyertakan detail (dengan risiko mengekspos detail ke pengguna Anda)Mungkin bukan yang Anda cari, tapi mungkin bagus untuk diketahui seseorang:
Jika Anda menggunakan .net Web Api 2, Anda dapat melakukan hal berikut:
Bergantung pada kesalahan model, Anda mendapatkan hasil ini:
sumber
Seperti ini misalnya:
Ini akan mengembalikan respons seperti ini (dengan asumsi JSON, tetapi prinsip dasar yang sama untuk XML):
Anda tentu saja dapat membuat objek / daftar kesalahan sesuka Anda, misalnya menambahkan nama bidang, id bidang, dll.
Meskipun itu adalah panggilan Ajax "satu arah" seperti POST entitas baru, Anda masih harus mengembalikan sesuatu ke pemanggil - sesuatu yang menunjukkan apakah permintaan tersebut berhasil atau tidak. Bayangkan sebuah situs di mana pengguna Anda akan menambahkan beberapa info tentang diri mereka sendiri melalui permintaan AJAX POST. Bagaimana jika informasi yang mereka coba masukkan tidak valid - bagaimana mereka tahu jika tindakan Simpan berhasil atau tidak?
Cara terbaik untuk melakukan ini adalah menggunakan Kode Status HTTP Lama yang Baik seperti
200 OK
dan seterusnya. Dengan cara itu JavaScript Anda dapat menangani kegagalan dengan benar menggunakan callback yang benar (kesalahan, sukses, dll).Berikut tutorial yang bagus tentang versi yang lebih maju dari metode ini, menggunakan ActionFilter dan jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
sumber
enquiry
objek saya , itu tidak mengatakan properti mana yang tidak valid? Jadi Jika saya dibiarkanCustomerAccountNumber
kosong, itu harus mengatakan pesan validasi default (bidang CusomterAccountNumber diperlukan ..)errors.Add(error.ErrorMessage);
agarerrors.Add(error.Exception.Message);
ini berfungsi untuk saya.Anda dapat menggunakan atribut dari
System.ComponentModel.DataAnnotations
namespace untuk menyetel aturan validasi. Lihat Validasi Model - Oleh Mike Wasson untuk detailnya.Lihat juga video ASP.NET Web API, Bagian 5: Validasi Kustom - Jon Galloway
Referensi Lain
sumber
Atau, jika Anda mencari kumpulan kesalahan sederhana untuk aplikasi Anda .. berikut adalah implementasi saya untuk ini:
Respon Pesan Kesalahan akan terlihat seperti ini:
sumber
Tambahkan kode di bawah ini di file startup.cs
sumber
Di sini Anda dapat memeriksa untuk menunjukkan kesalahan status model satu per satu
}
sumber
C #
...
Javascript
sumber
Saya memiliki masalah dalam menerapkan pola solusi yang diterima di mana saya
ModelStateFilter
akan selalu mengembalikanfalse
(dan kemudian 400) untukactionContext.ModelState.IsValid
objek model tertentu:Saya hanya menerima JSON, jadi saya menerapkan kelas pengikat model kustom:
Yang saya daftarkan langsung setelah model saya melalui
sumber
Anda juga dapat memberikan pengecualian seperti yang didokumentasikan di sini: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
Catatan, untuk melakukan apa yang disarankan artikel itu, ingatlah untuk menyertakan System.Net.Http
sumber