आप किसी व्यवस्थापक-केवल C # Azure फ़ंक्शन ऐप के पैरामीटर के रूप में किस प्रकार पास कर सकते हैं?
C # में लिखे गए Azure Function ऐप्स के पैरामीटर के रूप में किस प्रकार की अनुमति है जो केवल व्यवस्थापक समापन बिंदु के माध्यम से कॉल करने योग्य हैं?
मैंने बहुत सारे प्रलेखन और स्रोत कोड पढ़े हैं और मुझे अभी भी इसका उत्तर नहीं पता है। मैं निश्चित संदर्भों और स्पष्ट स्पष्टीकरणों की तलाश कर रहा हूं कि इसका क्या अर्थ है और क्यों, साथ ही अन्य पैरामीटर प्रकारों के साथ कार्यों को लागू करने के उदाहरण भी।
मुझे आश्चर्य हो रहा है कि अगर Azure टीम आपसे JSON की एक स्ट्रिंग को स्वीकार करने और खुद को उचित प्रकारों में पार्स करने की अपेक्षा करती है, लेकिन मैंने जो दस्तावेज़ पाया है, वह नहीं कहता है।
अतिरिक्त संदर्भ
मैं जिस विशिष्ट फ़ंक्शन पर काम कर रहा हूं, उसे केवल व्यवस्थापक इंटरफ़ेस के माध्यम से बुलाया जाना है ताकि कोई Http आदि बाइंडिंग न हो।
[NoAutomaticTrigger]
[FunctionName(nameof(SomeFunctionName))]
public async Task SomeFunctionName(ParameterTypeHere someParameterName)
{
...
इसके बजाय मैं क्या रख सकता हूं ParameterTypeHere
?
मेरे पास (इस समय) जो विशिष्ट उपयोग है, वह यह है कि मैं कुछ ऐसा करना चाहता हूं List<Guid>
या Guid[]
, मुझे कोई आपत्ति नहीं है यदि मुझे इसे कक्षा में लपेटना है या कुछ और लेकिन कुछ भी नहीं जो मैंने कोशिश की है तो मैंने एक स्ट्रिंग को विभाजित करना समाप्त कर दिया है अल्पविराम और एक खराब समाधान की तरह लगता है जो बाहर parsing।
वर्तमान में मुझे एक स्ट्रिंग पैरामीटर मिला है और मैं इसे कॉल कर रहा हूं:
$ curl -v http://localhost:7071/admin/functions/SomeFunctionName \
-d '{"input": "699F3073-9BFD-4DA7-9E61-4E6564D032EC,197DA362-C281-4E0F-BB92-8759F7A5B4B4"}' \
-H "Content-Type:application/json"
अब तक का शोध
चीजें जो मैंने पहले ही देख ली हैं कि मुझे अभी भी अनिश्चित है कि मैं string
और अधिक जटिल जानकारी के लिए क्या उपयोग कर सकता हूं :
- एज़्योर फ़ंक्शंस: जेनेरिक प्रकार इनपुट पैरामीटर के रूप में
- https://github.com/Azure/Azure-Functions/issues/735
- एज़्योर फ़ंक्शंस त्रुटि - स्ट्रिंग टाइप करने के लिए पैरामीटर को बाध्य नहीं कर सकता
- बाइंड पैरामीटर नहीं कर सकता, कारण बाइंडिंग द्वारा पैरामीटर प्रकार समर्थित नहीं है (HurepTrigger of Azure Functions)
- ILogger को azure फ़ंक्शन v1 में बाँध नहीं सकते
- https://docs.microsoft.com/en-us/azure/azure-functions/functions-manually-run-non-http
- https://github.com/Azure/azure-functions-host/blob/dev/src/WebJobs.Script/Binding/Manual/ManualTriggerAttributeBindingProvider.cs#L39
- https://github.com/Azure/azure-functions-host/blob/9b2fa0f3ea69c41ce819f046213eab4f40a5db5f/src/WebJobs.Script/Binding/StreamValueBinder.cs#L24-L30
- https://github.com/Azure/azure-functions-host/blob/9b2fa0f3ea69c41ce819f046213eab4f40a5db5f/src/WebJobs.Script/Utility.cs#L245
- जब HTTP समापन बिंदु के माध्यम से ट्रिगर किया गया enqueueTimeUtc तर्क के साथ ServiceBusTrigger विफल हो जाता है
पैरामीटर नाम को अनदेखा किया जाता है, और आपको input
वास्तविक पैरामीटर नाम की परवाह किए बिना इसे " " नाम के साथ पास करना होगा । बस एक और बात है।
और भी प्रसंग
यदि आप सोच रहे हैं कि आप कभी केवल व्यवस्थापक-फ़ंक्शन क्यों चाहते हैं, तो यह किसी अन्य व्यक्ति द्वारा चलाए जाने वाले एक-बंद कार्य के लिए था जो व्यवस्थापक अंतिम बिंदु तक पहुंच रखता है। यह सबसे सरल काम प्रतीत होता है जो काम कर सकता है। एक HttpTrigger
ठीक हो गया होता, यह सिर्फ YAGNI उल्लंघन कर रहे थे।
जवाब
कुछ हफ़्ते पहले, मैंने परीक्षण किया कि डीआई पर विशेष ध्यान देने वाले कार्यों का उपयोग करके एपीआई कैसे परिवर्तित किया जाए (उदाहरण के नीचे नहीं दिखाया गया है) और मान्यता। यह आपके प्रश्न का सीधा उत्तर नहीं हो सकता है, लेकिन यह दर्शाता है कि सादे मॉडल वर्गों का उपयोग किया जा सकता है।
public class MyRequestModel
{
[Display(Name = "Message")]
[Required, MinLength(3)]
public string Message { get; set; }
}
public static class MyHttpExample
{
[FunctionName(nameof(MyHttpExample))]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "test/{message}")] MyRequestModel req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var validationResults = new List<ValidationResult>();
if (!Validator.TryValidateObject(req, new ValidationContext(req, null, null), validationResults, true))
{
return new BadRequestObjectResult(validationResults);
}
var responseMessage = $"Hello, {req.Message}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
}
एज़्योर फ़ंक्शंस बाइंडिंग एक्सप्रेशन पैटर्न पर अधिक जानकारी https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-expressions-patterns
उपरोक्त डॉक्टर को पढ़ते समय, ध्यान रखें कि फ़ंक्शन #json C # का उपयोग करते समय एनोटेशन से उत्पन्न होता है, लेकिन डॉक्टर दिखाता है कि क्या उपलब्ध है। ऊपर दिए गए उदाहरण के लिए function.json उत्पन्न:
{
"generatedBy": "Microsoft.NET.Sdk.Functions-3.0.11",
"configurationSource": "attributes",
"bindings": [
{
"type": "httpTrigger",
"route": "test",
"methods": [
"get"
],
"authLevel": "function",
"name": "req"
}
],
"disabled": false,
"scriptFile": "../bin/MyFunctions.dll",
"entryPoint": "MyFunctions.MyHttpExample.Run"
}
यह सभी देखें https://stackoverflow.com/a/54489040/14072498