2013-02-28 6 views
8

मैं नए ASP.NET WebAPI OData उपयोग कर रहा हूँ (संस्करण 4.0.0 अंतिम प्रकाशित 27/2/2013 Nuget के अनुसार)अनुरूपण OData उत्पादन

असल में मैं के रूप में यह कर रहा हूँ यहां वर्णित: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api

मैं अपनी डेटा ट्रांसफर ऑब्जेक्ट्स प्रकाशित कर रहा हूं और ओडाटा परमाणु पब फ़ीड बनाया गया है लेकिन मैं इसके ऊपर कुछ और नियंत्रण रखना चाहता हूं। मुख्य रूप से मैं निम्न करने के लिए सक्षम होने के लिए करना चाहते हैं:

  • यह तय करें कि शीर्षक, लेखक और फ़ीड
  • के लिए अद्यतन तत्वों पर चला जाता है तय किया जाए या नहीं आपके पास संपादन के लिए लिंक
  • परिवर्तन क्या <category term="X" में और m:type में उप-गुणों में दिखाया गया है जो मेरे आवेदन में कक्षाएं हैं। वर्तमान में वे पूर्ण नामस्थान के साथ सी # कक्षा के नामों का पर्दाफाश करते हैं लेकिन मैं इसका खुलासा नहीं करना चाहता हूं।

धन्यवाद।

+0

हम अभी ओडेटामीडिया टाइप टाइपरेटर को एक्स्टेंसिबिलिटी हुक जोड़ने पर काम कर रहे हैं। इसके बाद आप परमाणु मेटाडेटा को अनुकूलित करने में सक्षम होना चाहिए। –

+0

और वैकल्पिक संपादन लिंक के संबंध में, एक कोडप्लेक्स [कार्य आइटम] (http://aspnetwebstack.codeplex.com/workitem/501) इसके लिए खुला है –

उत्तर

11

ओडाटा मीडिया प्रकार फॉर्मेटर अब अधिक विस्तार योग्य है। नमूने का पालन करें।

1) यह तय करें कि शीर्षक, लेखक और फ़ीड

public class AtomMetadataFeedSerializer : ODataFeedSerializer 
{ 
    public AtomMetadataFeedSerializer(IEdmCollectionTypeReference edmType, ODataSerializerProvider serializerProvider) 
     : base(edmType, serializerProvider) 
    { 
    } 

    public override ODataFeed CreateODataFeed(IEnumerable feedInstance, ODataSerializerContext writeContext) 
    { 
     ODataFeed feed = base.CreateODataFeed(feedInstance, writeContext); 
     feed.Atom().Title = new AtomTextConstruct { Kind = AtomTextConstructKind.Text, Text = "My Awesome Feed" }; 
     return feed; 
    } 
} 

public class CustomSerializerProvider : DefaultODataSerializerProvider 
{ 
    public override ODataEntrySerializer CreateEdmTypeSerializer(IEdmTypeReference edmType) 
    { 
     if (edmType.IsCollection() && edmType.AsCollection().ElementType().IsEntity()) 
     { 
      // feed serializer 
      return new AtomMetadataFeedSerializer(edmType.AsCollection(), this); 
     } 

     return base.CreateEdmTypeSerializer(edmType); 
    } 
} 

और रजिस्टर कस्टम serializer प्रदाता का उपयोग कर के लिए अद्यतन तत्वों पर चला जाता है,

config.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create(new CustomSerializerProvider(), new DefaultODataDeserializerProvider())); 

2) अनुकूलित लिंक संपादित

public class CustomEntityTypeSerializer : ODataEntityTypeSerializer 
{ 
    public CustomEntityTypeSerializer(IEdmEntityTypeReference edmType, ODataSerializerProvider serializerProvider) 
     : base(edmType, serializerProvider) 
    { 
    } 

    public override ODataEntry CreateEntry(EntityInstanceContext entityInstanceContext, ODataSerializerContext writeContext) 
    { 
     ODataEntry entry = base.CreateEntry(entityInstanceContext, writeContext); 
     if (notProduceEditLinks) 
     { 
      entry.EditLink = null; 
     } 

     return entry; 
    } 
} 

public class CustomSerializerProvider : DefaultODataSerializerProvider 
{ 
    public override ODataEntrySerializer CreateEdmTypeSerializer(IEdmTypeReference edmType) 
    { 
     if (edmType.IsEntity()) 
     { 
      // entity type serializer 
      return new CustomEntityTypeSerializer(edmType.AsEntity(), this); 
     } 

     return base.CreateEdmTypeSerializer(edmType); 
    } 
} 

और ऊपर के रूप में कस्टम serializer प्रदाता पंजीकृत करें।

हम अभी भी परिदृश्य 3 i.e aliasing प्रकार के नाम और नामस्थान का समर्थन नहीं करते हैं।

+0

ODataFeedSerializer कहां है। मेरे पास माइक्रोसॉफ्ट एएसपी.नेट वेब एपीआई ओडाटा (वी: 4.0.1) के लिए नवीनतम नुजेट पैकेज है, ऐसा प्रतीत नहीं होता है। – cellik

+0

यह हमारे रात के निर्माण में होना चाहिए। आप हमारे रात के निर्माण [यहां] (http://blogs.msdn.com/b/henrikn/archive/2012/06/01/using-nightly-asp-net-web- का उपयोग करने के तरीके पर हेनरिक के ब्लॉग पोस्ट का उल्लेख कर सकते हैं। स्टैक-nuget-संकुल-साथ-बनाम-2012 rc.aspx)। माईजेट फीड यूआरएल http://www.myget.org/F/aspnetwebstacknightly/ है –

संबंधित मुद्दे