मैं तुम्हें रूप में एक ही समस्या का सामना कर रहा हूँ, और मुझे लगता है कि यह पूरी तरह से बकवास है। मूल्य प्रकारों के साथ मैं देख सकता हूं कि [Required]
काम नहीं करता है क्योंकि मान-टाइप की गई संपत्ति शून्य नहीं हो सकती है, लेकिन जब आपके पास एक शून्य मूल्य मान है तो कोई समस्या नहीं होनी चाहिए। हालांकि, वेब एपीआई मॉडल सत्यापन तर्क समान रूप से गैर-शून्य और शून्य मूल्य प्रकारों का इलाज करता प्रतीत होता है, इसलिए आपको इसके आसपास काम करना होगा। मैं एक काम के आसपास Web API forum में पाया जाता है और इस बात की पुष्टि कर सकते हैं कि यह काम करता है: एक ValidationAttribute
उपवर्ग बनाएँ और नल मूल्य टाइप गुणों पर RequiredAttribute
की यह बजाय लागू होते हैं:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
public class NullableRequiredAttribute : ValidationAttribute, IClientValidatable
{
public bool AllowEmptyStrings { get; set; }
public NullableRequiredAttribute()
: base("The {0} field is required.")
{
AllowEmptyStrings = false;
}
public override bool IsValid(object value)
{
if (value == null)
return false;
if (value is string && !this.AllowEmptyStrings)
{
return !string.IsNullOrWhiteSpace(value as string);
}
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRequiredRule(FormatErrorMessage(metadata.DisplayName));
yield return modelClientValidationRule;
}
}
उपयोग में NullableRequiredAttribute:
public class Model
{
[NullableRequired]
public int? Id { get; set; }
}
यह कुछ समय हो गया है क्योंकि मैंने यह प्रश्न पोस्ट किया है और असल में मैं जो सुझाव देता हूं, वह कर रहा हूं, मुझे अभी भी समझ में नहीं आ रहा है कि क्यों वेब एपीआई इस तरह से काम करता है – jorgehmv
@jorgehmv मैं इसे एक बग मानता हूं, जब तक कि कोई मुझे अन्यथा विश्वास न करे। – aknuds1
यह वेबएपी 2 रिलीज में अब कोई मुद्दा नहीं है। बग तय किया जा रहा है। अगर कुछ भी मुझे नाराज है कि मुझे व्यूमोडेल विशेषताओं को निरर्थक बनाना होगा जब मैं सही त्रुटि संदेश लौटने के लिए आवश्यक मूल्यों को कम-से-कम कर रहा हूं। –