c# - 如何使用带有请求正文数据的 POST 方法使用 Azure 函数调用外部 api
问题描述
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Net;
using System.IO;
namespace FunctionRestApi
{
public static class Function1
{
[FunctionName("Function1")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("URL_with_client_id_authorization_token");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "GET";
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
log.LogInformation(result);
}
return new OkObjectResult(value: httpWebRequest);
}
}
}
我是天蓝色功能的新手。当我只使用“GET”方法时,此代码有效。但是,如果我想对请求正文数据(即日期范围(start_date 和 end_date)和其他一些 sub_user_id)使用“POST”方法,那么我该怎么做呢?
解决方案
这是一个使用HttpClient
一些注释的 POST 请求的简单示例:
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace AzureFunctionsSandbox.Functions
{
public static class Function1
{
private static readonly HttpClient _httpClient = new HttpClient();
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest request,
ILogger log)
{
// create request as an object to easily set values
var myRequest = new MyRequest
{
StartDate = DateTime.Now,
EndDate = DateTime.Now.AddDays(1),
SubUserId = "ABC123"
};
// serialize to JSON string for POST request body
var myRequestJsonBody = JsonConvert.SerializeObject(myRequest);
// .PostAsync() requires a HttpContent object - StringContent is a sub class
var requestContent = new StringContent(myRequestJsonBody, Encoding.UTF8, "application/json");
// make the POST request
var response = await _httpClient.PostAsync("URL_with_client_id_authorization_token", requestContent);
// use response body for further work if needed...
var responseBody = response.Content.ReadAsStringAsync();
return new OkResult();
}
}
public class MyRequest
{
[JsonProperty(PropertyName = "start_date")]
public DateTime StartDate { get; set; }
[JsonProperty(PropertyName = "end_date")]
public DateTime EndDate { get; set; }
[JsonProperty(PropertyName = "sub_user_id")]
public string SubUserId { get; set; }
}
}
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=net-5.0
推荐阅读
- docker - Jenkins容器中的docker权限被拒绝
- python - Tkinter 框架无法正确居中(Python)
- javascript - 创建后自动删除元素(Javascript/Jquery)
- c# - 在 Xamarin 中运行时使用 ViewCells 填充 ListView
- java - Java中的骆驼案例到句子案例
- python - Python 3.8 无法让 os.chdir() 使用双反斜杠
- maven - 如何在 Github Actions 工作流中从 Github 包访问 Maven 依赖项?
- pandas - 带有 PySpark 2.4 的 Pandas UDF
- google-apps-script - 从另一个工作表粘贴单元格引用
- javascript - 如何在开发中自动删除 console.logs()?