Estoy actualizando mi código de .NET 3.0 a .NET 5.0, esto cambia bastante la sintaxis. En mi código anterior, que es una compilación de solicitud http en AZURE FUNCTIONS .NET 5.0 aislada, crea una API GET que toma parámetros.
Este es mi código anterior de .NET 3.0
using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); byte[] RSA_Key_to_Correct = new byte[0x80]; string array_var = req.Query["array_var"]; string i = req.Query["i"]; string incrementing_value = req.Query["incrementing_value"]; } Simplemente no puedo encontrar una manera de usar req para obtener un parámetro de la llamada api como se hizo en .NET 3.0 string i = req.Query["i"];
En .NET 5.0 estoy usando
using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http;¿Alguna pista?
En la función de Azure .NET 5.0, usamos HttpRequestData en Http Trigger. La clase no contiene el parámetro Query . Para obtener más detalles, consulte aquí 
Entonces, si desea obtener una cadena de consulta, puede usar el paquete Microsoft.AspNetCore.WebUtilities.QueryHelpers para implementarlo como dijo @user1672994.
Por ejemplo
var queryDictionary = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(req.Url.Query); var result = queryDictionary["<key name>"];Simplemente puede agregar el nombre del parámetro de consulta a la lista de parámetros de la función de la siguiente manera y acceder al valor:
public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log, string parameter1) { log.LogInformation("C# HTTP trigger function processed a request."); log.LogInformation($"Parameter Value: {parameter1}"); }Hay un paquete de sistema que da el mismo resultado. Probablemente por eso se eliminó. Solo usa:
var query = System.Web.HttpUtility.ParseQueryString(req.Url.Query); var from = query["key"]Esto da el mismo resultado que req.Query["array_var"];
Disfruta 😉
Si usa Azure Functions (aislado) con .NET 5.0, puede obtenerlo de FunctionContext.BindingContext.BindingData de esta manera:
functionContext.BindingContext .BindingData["weatherForecastId"] .ToString(); [Function("WeatherForecastGet")] public async Task<HttpResponseData> Get([HttpTrigger(AuthorizationLevel.Function, "get", Route = "weather/{weatherForecastId:required}")] HttpRequestData req, FunctionContext executionContext) { string weatherForecastId = executionContext.BindingContext .BindingData["weatherForecastId"] .ToString(); var result = this.doSomething(weatherForecastId); var response = req.CreateResponse(HttpStatusCode.OK); await response.WriteAsJsonAsync(result); return response; } Como se hizo la pregunta sobre HttpRequestData . El FunctionContext también está disponible en él. Entonces puede lograr los mismos resultados (con más pasos) como este:
httpRequestData.FunctionContext .BindingContext .BindingData["weatherForecastId"] .ToString(); [Function("WeatherForecastGet")] public async Task<HttpResponseData> Get([HttpTrigger(AuthorizationLevel.Function, "get", Route = "weather/{weatherForecastId:required}")] HttpRequestData req, FunctionContext executionContext) { string weatherForecastId = req.FunctionContext .BindingContext .BindingData["weatherForecastId"] .ToString(); // some logic } Esto también funciona con el parámetro tanto en la consulta como en la ruta. Como puede ver, ambos parámetros en la ruta API a continuación se encuentran en BindingData
/api/weather/12?range=todayEsto funciona para mí. Bonito y sencillo. Hay un método para obtener los parámetros de consulta en un diccionario.
var qp = req.GetQueryParameterDictionary(); var foobar = req["foobar"];