Chr*_*nez 27 c# azure-functions .net-5
我正在将代码从 .NET 3.0 升级到 .NET 5.0,这对 sintaxis 做了很大的改变。在我之前的代码中,这是在 AZURE FUNCTIONS .NET 5.0 隔离中构建的 http 请求,构建了一个采用参数的 GET api。
这是我之前来自 .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"];
}
Run Code Online (Sandbox Code Playgroud)
我只是找不到一种方法来使用req从 api 调用中获取参数,就像在 .NET 3.0 上完成的那样string i = req.Query["i"];
在 .NET 5.0 中,我使用
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
Run Code Online (Sandbox Code Playgroud)
有什么提示吗?
Sve*_*ven 27
有一个系统包可以给出相同的结果。这可能就是它被删除的原因。只需使用:
var query = System.Web.HttpUtility.ParseQueryString(req.Url.Query);
var from = query["key"]
Run Code Online (Sandbox Code Playgroud)
这给出了与 req.Query["array_var"]; 相同的结果
享受
Jim*_* Xu 19
在Azure函数.NET 5.0中,我们使用HttpRequestDataHttp触发器。该类不包含Query参数。欲了解更多详情,请参阅此处

所以如果你想获取查询字符串,你可以使用该包Microsoft.AspNetCore.WebUtilities.QueryHelpers来实现它,如@user1672994所说。
例如
var queryDictionary =
Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(req.Url.Query);
var result = queryDictionary["<key name>"];
Run Code Online (Sandbox Code Playgroud)
Ris*_*mar 15
您只需将查询参数名称添加到函数参数列表中即可,如下所示并访问值:
public static async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequestData req,
FunctionContext executionContext, string parameter1)
{
var log = executionContext.GetLogger("TestParam");
log.LogInformation("C# HTTP trigger function processed a request.");
log.LogInformation($"Parameter Value: {parameter1}");
}
Run Code Online (Sandbox Code Playgroud)
FunctionContext.BindingContext.BindingData如果您将 Azure Functions(隔离)与 .NET 5.0 一起使用 - 您可以像这样获取它:
functionContext.BindingContext
.BindingData["weatherForecastId"]
.ToString();
Run Code Online (Sandbox Code Playgroud)
[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;
}
Run Code Online (Sandbox Code Playgroud)
正如问题所询问的那样HttpRequestData。里面FunctionContext也有。因此,您可以获得相同的结果(需要更多步骤),如下所示:
httpRequestData.FunctionContext
.BindingContext
.BindingData["weatherForecastId"]
.ToString();
Run Code Online (Sandbox Code Playgroud)
[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
}
Run Code Online (Sandbox Code Playgroud)
这也适用于查询和路径中的参数。正如您所看到的,下面的 API 路径中的两个参数都位于BindingData
/api/weather/12?range=today
Run Code Online (Sandbox Code Playgroud)