Я настраиваю приложение 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 не работает.