2014-10-15 6 views
8

साथ स्वैगर का उपयोग मैं कैसे करने के लिए संस्करण this class का उपयोग कर नामस्थान के आधार पर मेरे वेबएपीआई बाहर मिल गया है।एक namespaced-संस्करणीकृत WebAPI

मैं अपने एपीआई के स्वैगर दस्तावेज़ शामिल करने, Swashbuckle Nuget पैकेज का उपयोग Swashbuckle उपयोग कर रहा हूँ

अगर मैं सब कुछ को बनाए रखते हैं जब मैं/अकड़ पर नेविगेट /, मैं एक खाली पृष्ठ मिलता है।

मेरी App_Start में:

public class SwaggerConfig 
{ 
    public static void Register() 
    { 
     Bootstrapper.Init(GlobalConfiguration.Configuration); 
     SwaggerSpecConfig.Customize(c => 
      { 
       c.IncludeXmlComments(GetXmlCommentsPath()); 
      }); 
    } 

    private static string GetXmlCommentsPath() 
    { 
     return string.Format(@"{0}\App_Data\XmlDocumentation.xml", AppDomain.CurrentDomain.BaseDirectory); 
    } 
} 

और मेरे वेब एपीआई मार्गों:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{namespace}/{controller}/{id}", 
      defaults: new 
       { 
        id = RouteParameter.Optional 
       }); 
    } 
} 

अगर मैं {namespace} यह काम करता है को दूर (एपीआई आदेशों प्रदर्शित किए जाते हैं), लेकिन मुझे इस नाम स्थान रखना चाहते हैं मेरे मार्ग में जानकारी।

मैं इस काम करने के लिए स्वैगर/Swashbuckle कस्टमाइज़ करूं?

+1

[संभावित संस्करण के साथ स्वैगर में लीवरेज एकाधिक एपीवीवर्सन] का संभावित डुप्लिकेट (http: //stackoverflow.com/questions/30789045/leverage-multipleapiversions-in-swagger-with-attribute-versioning) – Johan

+0

@Johan: यह दूसरी तरह के आसपास है, मेरे सवाल पुराना है! : ओ – thomasb

+0

हां, लेकिन उस प्रश्न का एक बेहतर उत्तर है, और बेहतर उत्तर वाला सवाल यह है कि लिंक पर जाना चाहिए। – Johan

उत्तर

2

Swashbuckle Github रेपो से:

वहाँ "नाम स्थान मार्ग" के ऊपर कार्यान्वयन में एक दोष है, क्योंकि यह WebAPI मेटाडाटा परत टूट जाता है - ApiExplorer और इसलिए Swashbuckle।

Ie:

का संभावित हल है, हालांकि सीधे अपनी समस्या को हल नहीं करता है, जो Swashbuckle साथ ठीक काम करता है विशेषता बजाय वर्ज़निंग, उपयोग करने के लिए है

[RoutePrefix("api/v1/Features")] 
public class FeaturesV1Controller : ApiController 
{ 
    [Route("Products/{product}")] 
    public IList<Metadata.FeatureListItemModel> Get(long product){} 

दो Github मुद्दों को देखने के लिए कृपया अधिक जानकारी के लिए नीचे। https://github.com/domaindrivendev/Swashbuckle/issues/317 https://github.com/domaindrivendev/Swashbuckle/issues/303

मुझे विश्वास है कि विशेषता रूटिंग के साथ, अपने नियंत्रक प्रत्येक संस्करण के लिए एक अलग नाम होना आवश्यक है। अर्थात। वर्ग को वी 2 के लिए फीचर्सवी 1 कंट्रोलर और फीचर्स वी 2 कंट्रोलर नाम दिया जाना चाहिए, लेकिन मार्गों के लिए आप अभी भी/एपीआई/वी 1/फीचर्स और/एपीआई/वी 2/फीचर्स