MessagePack C # Set Resolver по умолчанию - PullRequest
0 голосов
/ 14 марта 2019

Я настраиваю приложение DotNet Core 2 с REST API. Я хочу использовать MessagePack для передачи сообщений, но не могу определить правильный способ установки распознавателя по умолчанию.

Объявление класса, конструктор и конечная точка API

[ApiVersion(Versions.V1)]
[Route("v{version:apiVersion}/")]
[Produces(MimeTypes.Json, MimeTypes.MessagePack)]
[ProducesResponseType((int) HttpStatusCode.InternalServerError)]
[ApiController]
public class FileProcessingController : ControllerBase
{

    public FileProcessingController()
    {
        // some code here
        MessagePackSerializer.SetDefaultResolver(
           MessagePack.Resolvers.ContractlessStandardResolver.Instance);
    }

  [HttpPost("[action]")]
  [ProducesResponseType(typeof(someObject), (int) HttpStatusCode.OK)]
  [ProducesResponseType((int) HttpStatusCode.BadRequest)]
  public async Task<IActionResult> ProcessIncomingFile([FromBody] RequestObject request)
  {
     // business code here
  }
}

В ConfigurationServices () моего файла startup.cs у меня есть

  services
    .AddMvc()
    .AddMessagePackFormatters()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

Когда я звоню в конечную точку, я получаю следующую ошибку.

An unhandled exception has occurred while executing the request.
System.InvalidOperationException: code is invalid. code:217 format:str 8

В моей вызывающей программе я могу сериализовать и десериализовать, используя следующий код.

var packed = MessagePack.MessagePackSerializer.Serialize(request.QueueRequest,
    MessagePack.Resolvers.ContractlessStandardResolver.Instance);
var json = MessagePackSerializer.ToJson(packed);
var unpacked =
    MessagePackSerializer.Deserialize<QueueRequest>(packed,
      MessagePack.Resolvers.ContractlessStandardResolver.Instance);

Похоже, что setDefaultResolver не работает.

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