2011-11-17 12 views
7

işlemek. Tüm model bağlama hatalarını ele almak ve bunları kullanıcı dostu bir şekilde müşteriye bildirmek istiyorum. Özel model bağlayıcılarımda zaten istisna işleyici tarafından güvenli kabul edilen ve müşteriye gösterilen özel bir istisna atıyorum. varsayılan model bağlayıcı (bir int için diyelim ki, asdf) geçersiz bir değer gördüğünde Güvenilir MVC denetleyicileri kullanarak REST API geliştiriyorum ASP.NET MVC modelini bağlama hataları

Ancak, ya tamamen görmezden (parametre gerekli değilse) veya atmak gibi görünen bir düz ArgumentException (parametre gerekiyorsa). Tüm ciltleyiciyi elle yeniden yazmadan, her iki vakayı güvenilir bir şekilde ele almak ve parametrenin adını ve ilgili hatayı almak mümkün mü? istemci hakkında bakım olmamalıdır yöntemi ve ad isimlerini ortaya nedeni olarak

doğrusu ArgumentException göstermek istemem. o önlenebilir eğer ben de doğrusu ArgumentException mesajı ayrıştırmak istemem, ve non-gerekli parametreler tamamen göz ardı ediliyor için geçersiz değerlerle sorunu çözmek olmaz.

+0

Hiç iyi bir çözüm bulmak mı? IModelBinder 'i dekore etmeyi veya alt sınıflamayı düşünüyorum ama daha iyi bir yol olup olmadığını bilmek istiyorum. –

+0

@FabianSchmied: Maalesef hayır. "Web API" modeli bağlayıcı, büyük olasılıkla bu dava için daha iyi bir desteğe sahip ve ASP.NET Core'u bilmiyorum. –

cevap

3

Sen modeline IValidatableObject arabirimini uygulamak. Orada o anda Required nitelik doğrulama değiştirerek kendi doğrulama mantığını oluşturabilirsiniz.

public class Model : IValidatableObject { 
    public int MyIntProperty { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { 
     if (MyIntProperty == 0) { 
      yield return new ValidationResult("Please provide a valid value for MyIntProperty.", new[] { "MyIntProperty" }); 
     } 
    } 
} 

Kumandanızda size doğrulama hatalarını görmeye ModelState.Errors koleksiyonunu kontrol edilebilmektedir. Ayrıca, bu, güçlü yazılan bir görünüm ve HTML form yardımcılarını kullanmanız şartıyla istemci tarafında CSS sınıfı hatası oluşturur.