mam następujący prosty kontroler Web API:Dlaczego mój kontroler API ASP.Net Core Web API nie zwróci kodu 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>
}
W Postman, mam ustawienie nagłówka Accept do application/xml
, ale bez względu na to, co staram, mogę uzyskać dane JSON tylko do tyłu.
Czytałem gdzieś, że w celu uzyskania XML, muszę dodać [DataContract]
i [DataMember]
atrybuty do mojego DTO, który teraz wygląda tak:
[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; }
}
Byłem na to kilka godzin teraz i po prostu nie widzę, dlaczego to nie działa. Próbowałem:
- Making metoda akcja synchroniczna i asynchroniczna
- Wracając dane bezpośrednio, oraz ustawienie typu powrotną do
IEnumerable<CustomerDto>
- Konwersja kolekcji do tablicy zamiast listy
- Skrutacyjnej
IActionResult
- Zwrot pojedynczego przedmiotu zamiast kolekcji
- Sprawdziłem, czy nagłówek Accept pojawia się w żądaniu, sprawdzając go w d ebugger.
- Wiele "Googling z Bing" i czytanie różnych blogów
Tworzenie nowego projektu WebAPI z szablonu i sprawdzanie, czy jest tam jakaś inspiracja (naprawdę nie).
Spodziewam się to proste, ale nie mogę go zobaczyć ...
Czy możesz pokazać, że zarejestrowałeś swoje formaty Xml w Startup.cs? –
Czy kiedykolwiek skonfigurowałeś formatery? –
Oczywiście, że to był problem. Ostatnio używałam interfejsu WebAPI, który był domyślnie włączony. Zapomniałem o nowym, lekkim podejściu pay-as-you-go w ASP.Net 5! Metody rozszerzania również nie były tak naprawdę łatwe do wykrycia.Musiałem wiedzieć, aby zainstalować inny pakiet NuGet, a następnie kropkę w wywołaniu AddMvc(). –