2014-07-16 22 views
5

मैंने एएसपी वेब-एपीआई लिखा है और मैंने this class का उपयोग करके एपीआई में वर्जनिंग जोड़ा है।वेब-एपीआई और स्वैगर दस्तावेज

मेरे मार्गों इस तरह दिखेगा:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "{namespace}/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttpControllerSelector(config)); 

तो मैं उपयोग कर सकते हैं https://localhost:44301/v1/test

मैं अब स्वैगर जोड़ने के लिए कुछ API दस्तावेज़ों का उत्पादन करने के (वास्तव में मैं Swashbuckle Nuget पैकेज का उपयोग कर रहा) कोशिश कर रहा हूँ

जब मैं /swagger पृष्ठ लोड करने के लिए ब्राउज़ करें लेकिन सभी नियंत्रकों के लिए त्रुटियों के साथ आता है:

Unable to read api 'TestController' from path https://localhost:44301/swagger/api-docs/TestController (server returned undefined) 

अगर मैं https://localhost:44301/swagger/api-docs/TestController ब्राउज़ इसके बारे में एक स्टैक ट्रेस के साथ एक NullReferenceException साथ आता है: मैं इस के लिए रास्ते में बदलते हैं तो

at Swashbuckle.Swagger.OperationGenerator.CreateParameter(ApiParameterDescription apiParamDesc, String apiPath) 
    at Swashbuckle.Swagger.OperationGenerator.<>c__DisplayClass2.<ApiDescriptionToOperation>b__1(ApiParameterDescription paramDesc) 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at Swashbuckle.Swagger.OperationGenerator.ApiDescriptionToOperation(ApiDescription apiDescription) 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at Swashbuckle.Swagger.ApiExplorerAdapter.CreateApi(IGrouping`2 apiDescriptionGroup, OperationGenerator operationGenerator) 
    at Swashbuckle.Swagger.ApiExplorerAdapter.<>c__DisplayClassb.<GetDeclaration>b__7(IGrouping`2 apiDescGrp) 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at Swashbuckle.Swagger.ApiExplorerAdapter.GetDeclaration(String basePath, String version, String resourceName) 
    at Swashbuckle.Application.CachingSwaggerProvider.<>c__DisplayClass4.<GetDeclaration>b__3(String k) 
    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) 
    at Swashbuckle.Application.CachingSwaggerProvider.GetDeclaration(String basePath, String version, String resourceName) 
    at Swashbuckle.Application.SwaggerSpecHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    at System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    at System.Web.Http.HttpServer.<>n__FabricatedMethod9(HttpRequestMessage , CancellationToken) 
    at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext() 

:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
) 

स्वैगर पृष्ठों तो काम करते हैं, लेकिन असली एपीआई नहीं करता है!

तो सवाल यह है कि मैं एक संस्करण एपीआई के साथ स्वैगर कैसे काम कर सकता हूं?

+0

हाय! मैं बिल्कुल एक ही स्थिति में हूं। क्या आप कभी भी अपनी समस्या का समाधान करने में सक्षम हैं? – thomasb

उत्तर

1

अंत मैं SDammann.WebApi.Versioning nuget पैकेज का इस्तेमाल किया और निम्नलिखित मार्गों का प्रयास करें:

VersionedControllerSelector.VersionPrefix = "v"; 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "v{version}/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

मेरे नियंत्रकों एक नाम स्थान में v1 कहा जाता है या v2 आदि

+1

जहां आप इसे स्वैगर के साथ काम करने में सक्षम हैं? – CamHart

+0

हां मैंने संस्करण का काम करने के लिए उपरोक्त का उपयोग किया – Paul

-1

इस

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}" 
      //defaults: new { id = RouteParameter.Optional } 
     ); 
संबंधित मुद्दे