C# 如何从客户端应用程序调用Azure函数并添加一个或多个函数参数?
我想从客户端应用程序调用这个Azure函数,但我不知道如何执行http请求 Azure功能:C# 如何从客户端应用程序调用Azure函数并添加一个或多个函数参数?,c#,azure-functions,C#,Azure Functions,我想从客户端应用程序调用这个Azure函数,但我不知道如何执行http请求 Azure功能: [FunctionName("ChangeDisplayname")] public static async Task<dynamic> MakeApiCall( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestM
[FunctionName("ChangeDisplayname")]
public static async Task<dynamic> MakeApiCall(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, ILogger log)
{
var context = await FunctionContext<dynamic>.Create(req);
var args = context.FunctionArgument;
var desireddisplayname = args["NewDisplayname"];
var request = new UpdateUserTitleDisplayNameRequest();
request.PlayFabId = context.CallerEntityProfile.Lineage.MasterPlayerAccountId;
request.DisplayName = desireddisplayname;
var adminApi = new PlayFabAdminInstanceAPI(context.ApiSettings, context.AuthenticationContext);
return await adminApi.UpdateUserTitleDisplayNameAsync(request);
}
[FunctionName(“ChangeDisplayname”)]
公共静态异步任务MakeApiCall(
[HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=null)]HttpRequestMessage请求,ILogger日志)
{
var context=wait FunctionContext.Create(req);
var args=context.FunctionArgument;
var desireddisplayname=args[“NewDisplayname”];
var request=new UpdateUserTitleDisplayNameRequest();
request.PlayFabId=context.CallerEntityProfile.relege.MasterPlayerAccounted;
request.DisplayName=所需显示名称;
var adminApi=new PlayFabAdminInstanceAPI(context.ApiSettings,context.AuthenticationContext);
返回wait wait adminApi.UpdateUserTitleDisplayNameAsync(请求);
}
这是我调用Azure函数的客户端应用程序代码。但它不起作用,因为我不知道如何将desireddisplayname添加到http请求中desireddisplayname应该是函数参数“NewDisplayname”。例如,如果desireddisplayname=“Chris”,那么当我调用Azure函数时,var desireddisplayname应该具有相同的值“Chris”
当我使用wait\u httpClient.GetAsync(url)时,是否有可能添加desireddisplayname
如何从客户端应用程序调用Azure函数并添加一个或多个函数参数
public static async Task<(bool requestexecuted, string desireddisplayname, string errormessage)> Azurehttprequest(this string url)
{
bool requestexecuted = false;
string errormessage = string.Empty;
var _httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(15) };
try
{
using (var httpResponse = await _httpClient.GetAsync(url))
{
if (httpResponse.StatusCode == HttpStatusCode.OK)
{
requestexecuted = true;
}
else
{
requestexecuted = false;
}
}
}
catch (Exception)
{
requestexecuted = false;
}
return (requestexecuted, errormessage);
}
公共静态异步任务Azurehttprequest(此字符串url)
{
bool requestexecuted=false;
string errormessage=string.Empty;
var_httpClient=newhttpclient{Timeout=TimeSpan.FromSeconds(15)};
尝试
{
使用(var httpResponse=awaitu httpClient.GetAsync(url))
{
if(httpResponse.StatusCode==HttpStatusCode.OK)
{
requestexecuted=true;
}
其他的
{
requestexecuted=false;
}
}
}
捕获(例外)
{
requestexecuted=false;
}
返回(requestexecuted,errormessage);
}
因为您的函数是一个HTTP POST端点,符合[HttpTrigger(AuthorizationLevel.Anonymous,“POST”,Route=null)]
-您必须使用HTTP POST
方法调用此函数的端点,而不是HTTP GET
以下是您可能希望使用的代码:
客户端:
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUri))
{
var body = new RequestModel
{
NewDisplayname = desireddisplayname
};
request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
HttpResponseMessage responseMsg = await httpClient.SendAsync(request).ConfigureAwait(false);
if (responseMsg == null)
{
throw new InvalidOperationException(
string.Format(
"The response message was null when executing operation {0}.",
request.Method));
}
return responseMsg;
}
// Get request body
RequestModel data = await req.Content.ReadAsAsync<RequestModel>();
name = data.NewDisplayname;
要读取的功能代码:
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUri))
{
var body = new RequestModel
{
NewDisplayname = desireddisplayname
};
request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
HttpResponseMessage responseMsg = await httpClient.SendAsync(request).ConfigureAwait(false);
if (responseMsg == null)
{
throw new InvalidOperationException(
string.Format(
"The response message was null when executing operation {0}.",
request.Method));
}
return responseMsg;
}
// Get request body
RequestModel data = await req.Content.ReadAsAsync<RequestModel>();
name = data.NewDisplayname;
//获取请求正文
RequestModel data=wait req.Content.ReadAsAsync();
name=data.NewDisplayname;
您是否通过了和?Azure函数http触发器的作用类似于RESTAPI端点。所以你会像平常一样称呼它。在这种情况下,您的函数允许post,因此您将在客户端中使用。我不知道如何使用PostAsync从客户端调用我的Azure函数。你能告诉我怎么做吗?你试过从邮递员那里打电话给你的端点吗?首先通过邮递员进行测试,然后尝试从代码中调用;什么是“req”?我应该在哪里使用此代码?此外,我还收到一条错误消息:错误CS0246:找不到类型或命名空间名称“RequestModel”(您是否缺少using指令或程序集引用?)如何解决此问题?req是您问题中的HttpRequestMessage。您必须使用名为NewDisplayName的公共属性创建单独的类RequestModel。