Я хочу передать параметры типу HttpTrigger в функции Azure 2. Я вижу ответ для функции Azure 1 в приведенной ниже ссылке.
Как передать параметры по POST в функцию Azure?
Ответ по ссылке выше await req.Content.ReadAsAsync<>();
Я ищу аналогичный ответ для Azure Function 2.
Здесь мы используем класс HttpRequest вместо класса HttpRequestMessage.
Ниже приведен код.
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string data = .............;
}





public static async void Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
HttpRequest req,
ILogger log)
{
var content = await new StreamReader(req.Body).ReadToEndAsync();
MyClass myClass = JsonConvert.DeserializeObject<MyClass>(content);
}
У вас может быть собственный класс, который можно отправить в виде JSON из почтового запроса.
Похоже, вы пытаетесь отправить POST запрос на Azure Function V2. См. приведенный ниже фрагмент кода.
Пользовательский класс запроса:
public class Users
{
public string Name { get; set; }
public string Email { get; set; }
}
Функция Azure версии 2:
В этом примере я беру два параметра, используя пользовательский класс, и возвращаю эти два свойства класса в качестве ответа.
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
//Read Request Body
var content = await new StreamReader(req.Body).ReadToEndAsync();
//Extract Request Body and Parse To Class
Users objUsers = JsonConvert.DeserializeObject<Users>(content);
//As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
var result = new OkObjectResult(objUsers);
return (IActionResult)result;
}
Образец запроса:
{
"Name": "Kiron" ,
"Email": "[email protected]"
}
Почтовый тест:
Note: You are looking for
await req.Content.ReadAsAsync<>();this actually needed for sending aPOSTrequest from your function. And Read from that server responses. But remember thatreq.Contentis not supported as reading post request inAzure Function V2which have shownFunction V1example here
Другой пример:
См. приведенный ниже фрагмент кода:
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
//Read Request Body
var content = await new StreamReader(req.Body).ReadToEndAsync();
//Extract Request Body and Parse To Class
Users objUsers = JsonConvert.DeserializeObject<Users>(content);
//Post Reuqest to another API
HttpClient client = new HttpClient();
var json = JsonConvert.SerializeObject(objUsers);
//Parsing json to post request content
var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json");
//Posting data to remote API
HttpResponseMessage responseFromApi = await client.PostAsync("YourRequstURL", stringContent);
//Variable for next use to bind remote API response
var remoteApiResponse = "";
if (responseFromApi.IsSuccessStatusCode)
{
remoteApiResponse = responseFromApi.Content.ReadAsStringAsync().Result; // According to your sample, When you read from server response
}
//As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
var result = new OkObjectResult(remoteApiResponse);
return (IActionResult)result;
}
Надеюсь, вы понимаете, если у вас все еще есть какие-либо вопросы, не стесняйтесь поделиться. Спасибо и удачного кодирования!
@l--''''''---------''''''''''''' Насколько я знаю, вы также можете использовать dynamic, поскольку он безопасен для типов, но если вы уже знаете, какие данные лучше использовать вместо этого. Когда мы используем динамический компилятор, необходимо искать каждый тип данных, что немного дорого.
Сначала создайте проект функции Azure (или добавьте его в свое решение) на основе запроса HTTP. вызывать. В отдельном классе созданного проекта вы можете увидеть пример. Вы передали JSON из тела запроса:
{"name":"John"}
и просто преобразуйте его в переменную в вашем коде:
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.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string name = data.name;
...
какая-либо польза от использования пользовательского DTO для простого
dynamic, такого какJObject?