मैं एक WebAPI विधि है, इस तरह:कस्टम बूलियन पैरामीटर बाइंडिंग
public string Get([FromUri] SampleInput input)
{
//do stuff with the input...
return "ok";
}
इनपुट इस तरह परिभाषित किया गया है:
public class SampleInput
{
// ...other fields
public bool IsAwesome { get; set; }
}
यह है के रूप में, यह ठीक काम करता है: अगर मैं &isAwesome=true
पारित क्वेरी स्ट्रिंग में, पैरामीटर मान true
के साथ शुरू होता है।
मेरे समस्या यह है कि मैं true
मूल्यों के रूप में दोनों &isAwesome=true
और &isAwesome=1
स्वीकार करना पसंद करते है। वर्तमान में, दूसरे संस्करण के परिणामस्वरूप इनपुट मॉडल में IsAwesome
false
होगा। का उपयोग कर
public class BooleanNumericParameterBinding : HttpParameterBinding
{
private static readonly HashSet<string> TrueValues =
new HashSet<string>(new[] { "true", "1" }, StringComparer.InvariantCultureIgnoreCase);
public BooleanNumericParameterBinding(HttpParameterDescriptor descriptor) : base(descriptor)
{
}
public override Task ExecuteBindingAsync(
ModelMetadataProvider metadataProvider,
HttpActionContext actionContext,
CancellationToken cancellationToken)
{
var routeValues = actionContext.ControllerContext.RouteData.Values;
var value = (routeValues[Descriptor.ParameterName] ?? 0).ToString();
return Task.FromResult(TrueValues.Contains(value));
}
}
... और में यह रजिस्टर Global.asax.cs,:
मैं क्या करने की कोशिश की, इस विषय पर विभिन्न ब्लॉग पोस्ट को पढ़ने के बाद, एक HttpParameterBinding
परिभाषित करने के लिए था :
var pb = GlobalConfiguration.Configuration.ParameterBindingRules;
pb.Add(typeof(bool), p => new BooleanNumericParameterBinding(p));
और
var pb = GlobalConfiguration.Configuration.ParameterBindingRules;
pb.Insert(0, typeof(bool), p => new BooleanNumericParameterBinding(p));
इनमें से कोई नहीं काम किया। मेरे कस्टम HttpParameterBinding
बुलाया जा रहा है नहीं कर रहा है और मैं अभी भी मूल्य 1
false
में अनुवाद मिलता है।
मैं Booleans के लिए 1
true
मान को स्वीकार करने के लिए वेबएपीआई को कैसे कॉन्फ़िगर कर सकता हूं?
संपादित करें: मैंने जो उदाहरण प्रस्तुत किया है वह जानबूझकर सरलीकृत है। मेरे पास मेरे आवेदन में बहुत से इनपुट मॉडल हैं और उनमें कई बुलियन फ़ील्ड हैं जिन्हें मैं ऊपर वर्णित तरीके से संभालना चाहता हूं। अगर यह सिर्फ एक क्षेत्र था, तो मैं इस तरह के जटिल तंत्र का उपयोग नहीं करता।
मेरे पास एक वर्कअराउंड सुझाव है, 'नमूना इनपुट' में 'IsAwesome1' कहें और स्ट्रिंग के रूप में' IsAwesome 'बनाएं,' IsAwesome1' = केवल तभी सेट करें यदि 'IsAwesome '=' "1" 'या' "सत्य है "' –
@ArindamNayak मेरे उदाहरण में एक और है कि कोड ब्लोट की तरह बस भी कई क्षेत्रों रहे हैं। मैंने सोचा कि वेब एपीआई में ऐसा करने का एक और शानदार तरीका था।मैं इस समय के लिए एमवीसी में वापस आ रहा हूँ; मेरे पास 'IModelBinder' है जो नौकरी अच्छी तरह से करता है। – GolfWolf