2013-02-04 36 views
8

मैं कुछ मॉडलों में एक उप मॉडल वर्ग (UserInfo) का उपयोग करता हूं जिसमें कुछ उपयोगकर्ता संबंधित जानकारी होनी चाहिए। इस उप मॉडल विभिन्न मॉडल में इस्तेमाल किया जा सकता है, उदाहरण केमॉडलबिंडर और उप मॉडल

public class Model 
{ 
    int string Value { get; set; } 
    public UserInfo User { get; set; } 
} 

मैं एक मॉडल बांधने की मशीन बनाया है और WebApiConfig में यह पंजीकृत कर लिया है के लिए

config.BindParameter(typeof(UserInfo), new UserModelBinder()); 

बात UserModelBinder WebAPI से बुलाया नहीं किया जाता है प्रसंस्करण पाइपलाइन। ऐसा लगता है कि इन मॉडलबिंडरों को उप मॉडल के लिए बुलाया नहीं जाता है। क्या मैं कुछ भूल रहा हूँ ?

उत्तर

1

इस प्रश्न पर एक ब्योरा देखें कि आपके बाइंडिंग कहां होने जा रहे हैं, इस बारे में कुछ विवरण के लिए What is the equivalent of MVC's DefaultModelBinder in ASP.net Web API? पर जाएं।

मुझे संदेह है कि संदेश 0 में आपका Model पारित किया जा रहा है?

यह है तो WebAPI अपने प्रकार deserialise और मॉडल, चूक XmlMediaTypeFormatter, JsonMediaTypeFormatter या FormUrlEncodedMediaTypeFormatter जा रहा है की प्रक्रिया पूरी होने फ़ॉर्मेटर का प्रयोग करेंगे।

यदि आप शरीर में मॉडल पोस्ट कर रहे हैं तो आपके अनुरोधित या स्वीकृत सामग्री-प्रकार (एप्लिकेशन/एक्सएमएल, एप्लिकेशन/जेसन इत्यादि) के आधार पर आपको धारावाहिक सेटिंग्स को कस्टमाइज़ करने या अपने MediaTypeFormatter को लपेटने या कार्यान्वित करने की आवश्यकता हो सकती है।

यदि आप एप्लिकेशन/जेसन का उपयोग कर रहे हैं तो आप अपने UserInfo क्लास के क्रमबद्धीकरण को अनुकूलित करने के लिए JsonConverters का उपयोग कर सकते हैं। यहाँ इस का एक उदाहरण Web API ModelBinders - how to bind one property of your object differently और यहाँ WebApi Json.NET custom date handling

internal class UserInfoConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return objectType == typeOf(UserInfo); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
           JsonSerializer serializer) 
    { 
     // 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     // 
    } 
} 
1

HttpConfigurationExtensions.BindParameter विधि रजिस्टर कि एक कार्रवाई पर दिया पैरामीटर प्रकार मॉडल बांधने की मशीन का उपयोग कर बाध्य होने के लिए है।

void Action([ModelBinder(UserModelBinder)] UserInfo info) 

यह केवल तभी कारगर कार्रवाई पैरामीटर निर्दिष्ट प्रकार (UserInfo) की है:

आप ऐसा क्या किया समान है।

, UserInfo वर्ग पर ही मॉडल बांधने की मशीन घोषणा डाल इतना है कि यह वैश्विक है कोशिश:

[ModelBinder(UserModelBinder)] public class UserInfo { } 

हालांकि, वहाँ रास्ते में कुछ मतभेद हैं कैसे वेबएपीआई और MVC बाँध मानकों। यहां माइक स्टाल का विस्तृत explanation है।

+0

लाना ModelBinder विशेषता या तो काम नहीं कर रहा है। – user49126