Estou criando um serviço web usando Web API. Eu implementei uma aula simples
public class ActivityResult
{
public String code;
public int indexValue;
public int primaryCodeReference;
}
E então eu implementei dentro do meu controlador
[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
Mas quando chamo a API passando em POST o arquivo json:
{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}
Recebo a seguinte mensagem de erro:
{
"Message": "The request entity's media type 'text/plain' is not supported for this resource.",
"ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
"ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
"StackTrace": " in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}
O que estou fazendo de errado?
Accept
cabeçalho paraapplication/json
. Você também precisa definir oContent-Type
cabeçalho comoapplication/json
.Respostas:
Na solicitação HTTP, você precisa definir o Content-Type para:
Content-Type: application/json
Então, se você estiver usando o cliente Fiddler, adicione
Content-Type: application/json
ao cabeçalho da solicitaçãofonte
Content-Type:application/json
Quando você define qualquer parâmetro de entrada do método de solicitação POST que deve ser anotado como
[FromBody]
, por exemplo :Todos os dados de entrada JSON devem ser dados brutos .
fonte
outra dica ... onde adicionar "content-type: application / json" ... ao campo de caixa de texto na guia Composer / Parsed. Existem 3 linhas já preenchidas lá, então adicionei este tipo de conteúdo como a 4ª linha. Isso fez o Post funcionar.
fonte
Verifique se você está passando o método como em
POST
vez deGET
. em caso afirmativo, você obterá o mesmo erro que postou acima.fonte
Todas as minhas configurações foram incluídas na resposta aceita. O problema que tive é que estava tentando atualizar o tipo de entidade "Tarefa" do Entity Framework como:
O que funcionou para mim foi criar minha própria entidade "DTOTask" como:
fonte
É necessário incluir
Content-Type:application/json
na seção de cabeçalho de solicitação de API da Web quando não menciona nenhum conteúdo, então, por padrão, éContent-Type:text/plain
passado para solicitação.Melhor maneira de testar a API na ferramenta Postman.
fonte