У меня есть следующий простой контроллер Web API:Почему мой ASP.NET Core Web API-контроллер не возвращает XML?
// GET: api/customers
[HttpGet]
public async Task<IActionResult> Get()
{
var customers = await uow.Users.GetAllAsync();
var dto = customers.Select(p => new CustomerDto {Id = p.Id, Email = p.Email, UserName = p.UserName});
return Ok(dto); // IEnumerable<CustomerDto>
}
В Почтальон, я устанавливаю заголовок Accept для application/xml
, но независимо от того, что я стараюсь, я не могу получить только данные JSON обратно.
Я где-то читал, что для того, чтобы получить XML, я должен добавить [DataContract]
и [DataMember]
атрибуты моей DTO, который теперь выглядит следующим образом:
[DataContract]
public class CustomerDto
{
[DataMember]
public string Id { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
[DataMember]
public string Email { get; set; }
[Required]
[Display(Name = "Login Name")]
[DataMember]
public string UserName { get; set; }
}
Я был у него несколько часов, и я просто не понимаю, почему это не работает. Я пробовал:
- Заставить метод действия синхронных и асинхронных
- Возвращение данных непосредственно, и установки типа возвращаемого значения
IEnumerable<CustomerDto>
- Преобразование коллекции в массив вместо списка
- Вернувшиеся a
IActionResult
- Возврат одного элемента вместо коллекции
- Я проверял, что заголовок Accept отображается в запросе, исследуя его в d ebugger.
- Множество «Googling with Bing» и чтение различных блогов
Создание нового проекта WebAPI из шаблона и просмотр, если там есть какое-то вдохновение (на самом деле).
Я ожидаю, что это просто, но я не могу видеть его ...
Не могли бы вы показать, что вы зарегистрировали свои форматирующие элементы Xml в Startup.cs? –
Вы когда-нибудь настраивали форматировщики? –
Конечно, это была проблема. В прошлый раз я использовал WebAPI, который был включен по умолчанию. Я забыл о новом облегченном подходе к оплате в ASP.Net 5! Тем не менее, методы расширения не были действительно очень открытыми.Я должен был знать, чтобы установить еще один пакет NuGet, а затем вставить вызов AddMvc(). –