[英]Can't get query parameter from HttpRequestData
我正在將我的代碼從 .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"];
}
我只是找不到一種方法來使用req從 api 調用中獲取參數,就像在 .NET 3.0 string i = req.Query["i"];
在 .NET 5.0 中使用
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
有什么提示嗎?
在 Azure 函數 .NET 5.0 中,我們在 Http Trigger 中使用HttpRequestData
。 該類不包含Query
參數。 更多詳情,請參考這里
因此,如果您想獲取查詢字符串,可以使用包Microsoft.AspNetCore.WebUtilities.QueryHelpers
來實現它,如@user1672994 所說。
例如
var queryDictionary =
Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(req.Url.Query);
var result = queryDictionary["<key name>"];
您可以將查詢參數名稱添加到函數參數列表中,如下所示並訪問該值:
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}");
}
有一個系統包可以提供相同的結果。 這可能是它被刪除的原因。 只需使用:
var query = System.Web.HttpUtility.ParseQueryString(req.Url.Query);
var from = query["key"]
這給出了與 req.Query["array_var"]; 相同的結果。
享受😉
如果您在 .NET 5.0 中使用 Azure Functions(隔離) - 您可以像這樣從FunctionContext.BindingContext.BindingData
中獲取它:
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;
}
正如問題所問的HttpRequestData
。 FunctionContext
也可以在其中使用。 因此,您可以像這樣獲得相同的結果(通過更多步驟):
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
}
這也適用於查詢和路徑中的參數。 如您所見,下面 API 路徑中的兩個參數都在BindingData
/api/weather/12?range=today
這對我有用。 很好很簡單。 有一種方法可以將查詢參數放入字典中。
var qp = req.GetQueryParameterDictionary();
var foobar = req["foobar"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.