2015-06-05 34 views
7

का उपयोग करके वेब एपीआई कॉल करते समय कस्टम हेडर को कैसे पास किया जाए हम अपने वेब एपिस को दस्तावेज करने के लिए स्वाशबकल का उपयोग कर रहे हैं और हमारे वेब एपिस का परीक्षण करने के लिए इसका उपयोग कर रहे हैं। मैं जानना चाहता हूं कि स्वैगर यूआई का उपयोग करके प्रत्येक अनुरोध के लिए अलग-अलग मूल्यों के साथ एकाधिक कस्टम हेडर कैसे पास कर सकते हैं।स्वैगर (स्वाशबकल)

मैंने स्वैगर यूआई में एक शीर्षलेख पास करने के लिए इंटरनेट में नीचे दिया गया जवाब देखा है लेकिन मेरे सिर को इसके चारों ओर पाने में असमर्थ था। भ्रमित करने वाला क्या है SwaggerExtensions फ़ाइल के बारे में है। इस फ़ाइल का उद्देश्य क्या है और जेएस फ़ाइल के योग्य नाम में इस फ़ाइल का उल्लेख क्यों है।

1. "SwaggerExtensions" नाम की नई फ़ाइल जोड़ें, फिर "onComplete.js" नाम की नई जेएस फ़ाइल जोड़ा गया है, आपको इस फ़ाइल के लिए "एंबेडेड संसाधन" में बिल्ड एक्शन बदलना होगा।

$('#input_apiKey').change(function() { 

var key = $('#input_apiKey')[0].value; 
if (key && key.trim() != "") { 
key = "Bearer " + key; 
window.authorizations.add("key", new ApiKeyAuthorization("Authorization", key, "header")); 
} 
}); 

3.Open फ़ाइल "SwaggerConfig.cs" और रजिस्टर विधि के अंदर नीचे कोड पेस्ट:

SwaggerUiConfig.Customize(c => 
{ 
c.SupportHeaderParams = true; 
c.InjectJavaScript(typeof(SwaggerConfig).Assembly,  "AngularJSAuthentication.API.SwaggerExtensions.onComplete.js"); 
}); 

2.Inside फ़ाइल "onComplete.js" निम्नलिखित कोड पेस्ट

उत्तर

7

स्वैगर के स्वैशबल्स कार्यान्वयन आवश्यक swagger विनिर्देश उत्पन्न करने के लिए एक्सएमएल कोड टिप्पणियों को पढ़ता है। दुर्भाग्यवश, यदि अनुरोध करने के लिए आपको प्राधिकरण शीर्षलेख (एक्सेस टोकन) की आवश्यकता है, तो XML कोड टिप्पणियां इस जानकारी को स्वाशबकल को प्रदान नहीं करती हैं। Swagger विनिर्देश पीढ़ी के दौरान आपको मैन्युअल रूप से इस नए पैरामीटर को इंजेक्ट करना होगा।

स्वाशबकल नए पैरामीटर लागू करने के लिए IOperationFilter नामक एक इंटरफ़ेस प्रदान करता है। इस इंटरफ़ेस को कार्यान्वित करने से ऐसा कुछ दिखाई देगा।

public class AddAuthorizationHeaderParameterOperationFilter: IOperationFilter 
{ 
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
    { 
     var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); 
     var isAuthorized = filterPipeline 
             .Select(filterInfo => filterInfo.Instance) 
             .Any(filter => filter is IAuthorizationFilter); 

     var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); 

     if (isAuthorized && !allowAnonymous) 
     { 
      operation.parameters.Add(new Parameter { 
       name = "Authorization", 
       @in = "header", 
       description = "access token", 
       required = true, 
       type = "string"      
      }); 
     } 
    } 
} 

अपने SwaggerConfig.cs फ़ाइल के अंदर, जोड़ने के निम्नलिखित

public class SwaggerConfig 
{ 
    public static void Register() 
    { 
     var thisAssembly = typeof(SwaggerConfig).Assembly; 

     GlobalConfiguration.Configuration 
      .EnableSwagger(c => 


       c.SingleApiVersion("v1", "API").Description("An API ") 
                 .TermsOfService("Some terms") 
                 .Contact(cc => cc.Name("Team") 
                 .Email("[email protected]")); 

       c.OperationFilter(() => new AuthorizationHeaderParameterOperationFilter())); 


     } 
} 
+2

लेकिन, मुझे यूआई (स्वैगर-यूआई) से हैडर मूल्य पास करना चाहते हैं। हेडर के मान को कैसे पास करें? –

+0

धन्यवाद @nimacks, यह मेरे लिए काम किया। हालांकि किसी कारण से मेरा ऑपरेशन। पैरामीटर शून्य था, इसलिए मैंने एक चेक जोड़ा जो आवश्यक पैरामीटर जोड़ने से पहले शून्य हो गया है। – MaxJ

1

आप SwaggerUI साथ एक पैरामीटर जोड़ सकते हैं:

swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("api_key", key, "header")); 
6

Swashbuckle InjectJavaScript उपयोग करने के लिए यह पूरा करने के सुझाव देते हैं। https://github.com/domaindrivendev/Swashbuckle#injectjavascript

मैं http शीर्षलेख में प्राधिकरण के लिए एक भालू टोकन जोड़ने के लिए निम्न कोड का उपयोग करता हूं।

httpConfiguration 
.EnableSwagger(c => c.SingleApiVersion("v1", "A title for your API")) co 
.EnableSwaggerUi(c => 
    { 
     c.InjectJavaScript(containingAssembly, "ProjectName.SwaggerUIEnableBearerToken.js"); 
    }); 

SwaggerUIEnableBearerToken.js

$(function() { 
$('#input_apiKey').attr("placeholder", "bearer token"); 
$('#input_apiKey').off(); 
$('#input_apiKey').change(function() { 
    var token = this.value; 
    if (token && token.trim() !== '') { 
     token = 'Bearer ' + token; 
     var apiKeyAuth = new window.SwaggerClient.ApiKeyAuthorization("Authorization", token, "header"); 
     window.swaggerUi.api.clientAuthorizations.add("token", apiKeyAuth); 
     } 
    } 
}); 
})(); 

इस मुद्दे धागे से अधिक देखें: https://github.com/domaindrivendev/Swashbuckle/issues/222

+2

यह मेरे लिए एक आकर्षण की तरह काम किया। – PancakeParfait

+0

धन्यवाद। यह भी मेरे लिए काम किया। – Karthik

+0

युक्त एस्क्रिप्शन क्या है? – blthiewes

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