.NET 5 Blazor Server App ObjectResult Заголовок "Accept" не соблюдается
Я создаю контроллер в приложении.NET 5 Blazor Server, а
OkObjectResult
Я возвращаюсь из своего контроллера, всегда возвращает JSON, даже если я установил
Accepts: application/xml
.
Из-за получения правильного результата внутри моего обычая
InvalidModelStateResponseFactory
, Я склонен думать, что это может быть ошибка.
Startup.cs:
services
.AddControllers(options =>
{
options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
})
.ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = actionContext =>
{
KeyValuePair<string, ModelStateEntry> firstModelErrorPropertyName = actionContext.ModelState.First(s => s.Value.Errors.Count > 0);
ModelError firstError = firstModelErrorPropertyName.Value.Errors.First();
ObjectResult toReturn = new ObjectResult(new ErrorResponse
{
Status = RequestStatus.Fail,
ErrorCode = ErrorCode.MissingParameter,
ErrorDescription = $"Missing POST parameter: {firstModelErrorPropertyName.Key}: {"Description here"}"
});
toReturn.StatusCode = 200;
return toReturn;
};
})
.AddXmlSerializerFormatters()
.AddXmlDataContractSerializerFormatters()
.AddXmlOptions(options =>
{
})
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumMemberConverter());
});
Контроллер:
/// <summary>
/// Enroll a member in IDCS services.
/// </summary>
/// <returns></returns>
[HttpPost("enroll")]
[Consumes("application/x-www-form-urlencoded")]
[FormatFilter]
public async Task<IActionResult> EnrollAsync(
[FromForm] EnrollRequest req)
{
return Ok(new
{
content = "Enroll"
});
}
1 ответ
Решение
Я понял проблему сразу после публикации. Если я верну определенный объект:
return Ok(new EnrollmentSuccessResponse
{
Content = "Enroll"
});
вместо анонимного объекта
return Ok(new
{
content = "Enroll"
});
Все работает как положено.