Веб-API, возвращающий UTF-16 - PullRequest
0 голосов
/ 06 июля 2018

У меня есть простой тестовый API

[Route("api/[controller]")]
[Produces("application/json")]
[ApiController]
public class ValuesController : ControllerBase
{

 [HttpPost]
 public IActionResult Post([FromBody] FulfillmentRequst data)
    {
       var obj = new DummyObject();
       Ok(obj)
    }
}

Проблема может быть замечена в журналах, когда почтовый запрос поступает как UTF-8, но ответ отправляется в UTF-16.

информация: Microsoft.AspNetCore.Hosting.Internal.WebHost [1] Запрос запуска HTTP / 1.1 POST http://371395ef.ngrok.io/api/values application / json; кодировка = UTF-8 3401

info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] Маршрут соответствует {action = "Post", controller = "Values"}. Выполнение действия WebApplicationAPI.Controllers.ValuesController.Post (WebApplicationAPI)
информация: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] Выполнение метода действия
WebApplicationAPI.Controllers.ValuesController.Post (WebApplicationAPI) с аргументами (ActionsOnGoogle.Core.v2.Request.FulfillmentRequst) - Состояние проверки: действительно
информация: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] Выполнен метод действия WebApplicationAPI.Controllers.ValuesController.Post (WebApplicationAPI), возвращен результат Microsoft.AspNetCore.Mvc.OkObjectResult в 8,796 мс.
информация: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor [1] Выполнение ObjectResult, запись значения типа «ActionsOnGoogle.Core.v2.Response.SimpleResponseResponse».
информация: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] Выполнено действие WebApplicationAPI.Controllers.ValuesController.Post (WebApplicationAPI) в 267.2988 мс
информация: Microsoft.AspNetCore.Hosting.Internal.WebHost [2] Запрос завершен в 508.7373ms 200 заявка / JSON; кодировка = UTF-16 * * тысячи двадцать-одина

Это совершенно новый .net core web api. Я ничего не изменил в настройках. Как заставить его вернуть utf-8 при возврате ответа json от API.

Основная проблема заключается в том, что сервер при другом чтении из веб-хука, очевидно, не может обработать utf-16, анализируя его как мусор.

Ожидается объект сообщения, но он получен: \ "猀 攀 ∀ 㨀 琀 爀 甀 攀 Ⰰ∀ 爀 椀 挀 栀 刀 攀 猀 瀀 漀 渀 猀 攀 ∀ 㨀 笀 ∀ 椀 琀 攀 洀 猀 ∀ 㨀 嬀 笀 ∀ 猀 椀 洀 瀀 氀 攀 刀 攀 猀 瀀 漀 渀 猀 攀∀ 㨀 笀 ∀ 琀 攀 砀 琀 吀 漀 匀 瀀 攀 攀 挀 栀 ∀ 㨀 ∀ 圀 伀 刀 䬀 䐀 䄀 䴀 䤀 吀 ∀ 紀 紀 崀 紀 紀 紀 紀 \ ""

1 Ответ

0 голосов
/ 06 июля 2018

По сути, вы можете форсировать ответ, используя свойство Charset. Примерно так:

public class CharsetAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8";
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...