C# 将参数作为querystring传递给URL中的Azure函数(HttpTrigger)

C# 将参数作为querystring传递给URL中的Azure函数(HttpTrigger),c#,azure,azure-functions,C#,Azure,Azure Functions,在Visual Studio 2017中创建了一个新的Azure函数(HTTPTriggerbased),并且难以通过自定义路由传递参数。以下是代码摘录: [FunctionName(“RunTest”)] 公共静态异步任务运行( [HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“orchestrators/contoso_function01/{id:int}/{username:alpha}”)]HttpRequestM

在Visual Studio 2017中创建了一个新的Azure函数(
HTTPTrigger
based),并且难以通过自定义路由传递参数。以下是代码摘录:

[FunctionName(“RunTest”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“orchestrators/contoso_function01/{id:int}/{username:alpha}”)]HttpRequestMessage请求,TraceWriter日志)
{
Info(“C#HTTP触发器函数处理了一个请求。”);
//解析查询参数
字符串名称=req.GetQueryNameValuePairs()
.FirstOrDefault(q=>string.Compare(q.Key,“id”,true)==0)
价值
字符串instanceId=req.GetQueryNameValuePairs()
.FirstOrDefault(q=>string.Compare(q.Key,“username”,true)==0)
价值
if(name==null)
{
//获取请求主体
动态数据=wait req.Content.ReadAsAsync();
名称=数据?.name;
}
返回名称==null
?req.CreateResponse(HttpStatusCode.BadRequest,“请在查询字符串或请求正文中传递名称”)
:req.CreateResponse(HttpStatusCode.OK,“Hello”+名称);
}
我试图使用以下URL访问函数,但无法使用
GetQueryNameValuePairs()
API从查询字符串中检索
ID
UserName
值,因为它在集合中只有0项:

http://localhost:7071/api/orchestrators/contoso_function01/123/abc
http://localhost:7071/api/orchestrators/contoso_function01/?id=123&username=abc

不确定这是否是处理使用Azure函数为HTTP请求传递参数需求的正确方法,但如果我为每个查询字符串包含参数,并具有匹配的参数名称(这显然是绑定工作所必需的),它会自动将URL中传递的值分配给相应的参数

[FunctionName(“HttpRunSingle”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“orchestrators/contoso_function01/{id:int}/{username:alpha}”)]
HttpRequestMessage请求,
int id,
字符串用户名,
TraceWriter日志)
{
Info(“C#HTTP触发器函数处理了一个请求。”);
返回(id==0 | | string.IsNullOrEmpty(用户名))
?req.CreateResponse(HttpStatusCode.BadRequest,“请在查询字符串或请求正文中传递名称”)
:req.CreateResponse(HttpStatusCode.OK,“Hello”+id+“”+username);
}
您可以像这样做:

var query = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query);
string userid = query.Get("username");

我试过各种各样的东西。这是唯一对我有用的东西

string RawUrl=url;
int index=RawUrl.IndexOf(“?”);
如果(索引>0)
RawUrl=RawUrl.Substring(index).Remove(0,1);
var query=System.Web.HttpUtility.ParseQueryString(RawUrl);
userId=query.Get(“id”);
它与这样的Url配合得很好

https://www.bing.com?id=12345678955&test=12345
在使用语句使
System.Web.HttpUtility.ParseQueryString
正常工作之前,请确保并添加此项

#r“System.Web”

对于希望像这样使用URL的任何人:


http://localhost:7201/api/orchestrators/contoso_function01//.

这对我很有效。我像{id:int}和{username:string}一样尝试,但得到了绑定错误。一旦我放弃了这些类型,它就工作得很好