是否可以直接从HttpRequestMessage
对象检索Azure函数的路由参数?
我知道我可以在函数定义中指定它们
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "v1/inspectionOrders/{inspectionOrderId}")]HttpRequestMessage req,
string inspectionOrderId, TraceWriter log)
但是我需要从HttpRequestMessage
中检索它们。我已经查看了请求对象,并使用键Properties
将其保存在"MS_AzureWebJobs_HttpRouteData"
字典下,但是直接访问它是一个坏主意。
如果我打电话
protected override async Task<HttpResponseMessage> RetrieveData(HttpRequestMessage req, string customerId)
{
string objectId = req.GetRouteData()?.Values["objectId"] as string;
...
}
我会得到一个例外,因为IHttpRouteData
集合不包含参数化的片段。
答案 0 :(得分:0)
您可以使用var route=req.GetRouteData().Values.ToList()[0].Value;
获取Route参数。另外,如果您要从路由中删除api ,则可以在host.json
文件中添加以下代码。
{
"http": {
"routePrefix": ""
}
}
工作快照:
答案 1 :(得分:0)
即使它已经很老了,我也只想分享我的解决方案。可能会对某人有所帮助。我已在Azure Function V3版本中使用它
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
在相应的类中注入上下文访问器
public abstract class ApiClientBase
{
private readonly IHttpContextAccessor httpContextAccesor;
public ApiClientBase(IHttpContextAccessor httpContextAccesor)
{
this.httpContextAccesor = httpContextAccesor;
}
protected async Task<string> GetTenant()
{
var routeData = this.httpContextAccesor.HttpContext.Items["MS_AzureWebJobs_HttpRouteData"] as Dictionary<string, object>;
return routeData["tenantId"] as string;
}
}