HTTP Patch в лазурной функции - PullRequest
0 голосов
/ 17 февраля 2019

Я ищу способ реализовать правильный путь HTTP в функции Azure.Я нашел примеры, которые проверяют нулевое значение каждого свойства и добавляют его к объекту в PATCH.Я обнаружил, что это не идеал, а просто обходной путь.Единственная подпись, которую я нашел для запускаемой по HTTP функции (v2), это

public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "HTTP VERB", Route = "")] HttpRequest req,
     ILogger log)
    {
    }

Вместо этого мне нужно передать « JsonPatchDocument », и клиент сможет передать документ PATCH какниже

public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "PATCH", Route = "")] **JsonPatchDocument<Customer> patch**,
 ILogger log)
{
}

PATCH /api/customer
[
    {
      "op": "replace",
      "path": "/firstname",
      "value": "Vijay"
    },
    {
      "op": "replace",
      "path": "/email",
      "value": "example@example.com"
    },
]

, чтобы я мог использовать " patch.ApplyTo () " для указания свойств.Можно ли это сделать в лазурной функции?

1 Ответ

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

Я нашел решение для этого.Я не смог передать тип "JsonPatchDcument" в функцию Azure, но я мог бы проанализировать тело запроса в JsonPatchDocument, как показано ниже,

FunctionName("PatchInstitute")]
    public async Task<IActionResult> PatchInstitute(
        [HttpTrigger(AuthorizationLevel.Anonymous, "patch", Route = ApiConstants.BaseRoute + "/institute/{instituteId}")] HttpRequest req,
        ILogger log, [Inject]IInstituteValidator instituteValidator, int instituteId, [Inject] IInstituteProvider instituteProvider)
    {
        try
        {
           //get existing record with Id here
            var instituteDto = instituteProvider.GetInstitueProfileById(instituteId);



            using (StreamReader streamReader = new StreamReader(req.Body))
            {
                var requestBody = await streamReader.ReadToEndAsync();

                //Deserialize bosy to strongly typed JsonPatchDocument
                JsonPatchDocument<InstituteDto> jsonPatchDocument = JsonConvert.DeserializeObject<JsonPatchDocument<InstituteDto>>(requestBody);

                //Apply patch here
                jsonPatchDocument.ApplyTo(instituteDto);

                //Apply the change
                instituteProvider.UpdateInstitute(instituteDto);

            }

            return new OkResult();

        }
        catch (Exception ex)
        {
            log.LogError(ex.ToString());
           // return Generic Exception here
        }
    }

И JsonPathDocument для передачи от клиента будет выглядеть следующим образом,

[
    {
      "op": "replace",
      "path": "/isActive",
      "value": "true"
    }
]

Здесь вы можете передать любые поля для обновления (патч)

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