Функция Azure, возвращающая код состояния + JSON, без определения возврата в каждой части логики - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть функция Azure 2.x, которая находится в статическом классе, который выглядит следующим образом

[FunctionName("Register")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest req, ILogger log)
{
    MyTypeClass defReturn = new MyTypeClass();
    HttpStatusCode defCode = HttpStatusCode.BadRequest;

    /*
    * Logics that might or might not changes
    * defReturn and defCode value
    */

    return StatusCode((int) defCode, JsonConvert.SerializeObject(defReturn))
}

Как мне получить часть return StatusCode((int) defCode, JsonConvert.SerializeObject(defReturn))?есть ли такой метод или эквивалент в функциях Azure 2.x?

в функциях Azure 1.xi может сделать эквивалент с req.CreateResponse(defCode, defReturn), где req равно HttpRequestMessage, но я пытаюсь придерживаться 2.x шаблона / стандарта

Дополнительнообъяснение: указанный код должен возвращать HTTP 400 Bad Request с defReturn в качестве тела ответа клиенту.Но когда я изменяю defCode на HttpStatusCode.Accepted, он должен возвращать HTTP 202 Accepted с тем же телом ответа.Как я могу добиться этого?

Дополнительное объяснение # 2: (если я правильно помню) в ASP.NET Core 1.xi может именно так, возвращая IActionResult, вызывая статический метод StatusCode, а неStatusCodes (это статический класс, содержащий константы HTTP-кодов

Спасибо

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

Это сообщение в блоге может помочь:

Возвращение кодов статуса HTTP из функций Azure (Это сообщение относится к функциям Azure v2)

0 голосов
/ 02 августа 2019

Довольно поздний ответ, но я столкнулся с той же проблемой сегодня, поэтому, возможно, это полезно для других поисковиков

Вариант 1: Коды по умолчанию

Этоподробно изложено в блоге Здесь

Некоторые коды, такие как 200 и 400, предопределены и могут использоваться

return new OkObjectResult("Your message"); // 200
return new BadRequestObjectResult("Your error message"); // 400

Эти функции доступны не для всех известных состояний.Коды, но некоторые из самых распространенных.

Вариант 2: Ручная настройка Код

Если вам нужны конкретные коды, которые не предусмотрены по умолчанию, вы можете использовать базуклассы и создайте их сами.

Например, для получения ответа Teapot вы можете просто использовать

using Microsoft.AspNetCore.Http;

var result = new ObjectResult("Your message");
res.StatusCode = StatusCodes.Status418ImATeapot;
return res;

В этом примере Statuscode используется из класса StatusCodes, но вы можете использоватьтакже введите другие коды (обычно просто придерживайтесь этих кодов)

Кроме того, класс ObjectResult предлагает дополнительные параметры форматирования, если это необходимо.

0 голосов
/ 25 февраля 2019

Вы можете создать класс модели, в котором вы можете определить два свойства, то есть одно для вашего кода состояния, другое для вашего объекта Json, а затем вы можете вернуть полную модель.Пример кода будет выглядеть так:

public static class QueueTriggerTableOutput
{
    [FunctionName("QueueTriggerTableOutput")]
    [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
    public static Person Run(
        [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order,
        ILogger log)
    {
        return new Person() {
                PartitionKey = "Orders",
                RowKey = Guid.NewGuid().ToString(),
                Name = order["Name"].ToString(),
                MobileNumber = order["MobileNumber"].ToString() };
    }
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

на приемном фронте, вы можете поймать оба свойства.

PS .- вы должны изменить тип возвратаВаша функция.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...