Há alguns meses, a Microsoft decidiu alterar a classe HttpResponseMessage. Antes, você poderia simplesmente passar um tipo de dados para o construtor e retornar a mensagem com esses dados, mas não mais.
Agora, você precisa usar a propriedade Content para definir o conteúdo da mensagem. O problema é que ele é do tipo HttpContent, e parece que não consigo encontrar uma maneira de converter uma string, por exemplo, para HttpContent.
Alguém sabe como lidar com esse problema? Muito obrigado.
c#
asp.net-mvc
asp.net-web-api
pretor
fonte
fonte
Você deve criar a resposta usando Request.CreateResponse :
Você pode passar objetos e não apenas cadeias de caracteres para CreateResponse e eles serão serializados com base no cabeçalho Accept da solicitação. Isso evita que você escolha manualmente um formatador.
fonte
CreateErrorResponse()
se a resposta for um erro, como no exemplo desta resposta. Dentro do try-catch, estou usando:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
E, esta é a resposta correta se você estiver preocupado em respeitar o cabeçalho Accept do chamador, sem travessuras extras. (E você está usando o WebAPI)ApiController
. Se você só estão herdandoController
em vez disso, ele não funciona, e você tem que criá-lo:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Aparentemente, a nova maneira de fazer isso é detalhada aqui:
http://aspnetwebstack.codeplex.com/discussions/350492
Para citar Henrik,
Então, basicamente, é necessário criar um tipo ObjectContent, que aparentemente pode ser retornado como um objeto HttpContent.
fonte
new JsonMediaTypeFormatter();
ou similar dependendo do seu formatoObjectContent
não foi encontrado, usando o WCFA solução de linha única mais fácil é usar
Para conteúdo JSON serializado:
fonte
Para qualquer objeto T, você pode fazer:
fonte
Request
está disponível apenas com umCreateResponse
método se você estiver herdandoApiController
. Não funcionará se estiver usandoController
.Você pode criar seus próprios tipos de conteúdo especializados. Por exemplo, um para o conteúdo Json e outro para o conteúdo Xml (basta atribuí-los ao HttpResponseMessage.Content):
fonte
Inspirado na resposta de Simon Mattes, eu precisava satisfazer o tipo de retorno exigido IHttpActionResult de ResponseMessageResult. Também usando JsonContent da nashawn, acabei com ...
Veja a resposta de nashawn para JsonContent.
fonte
Sem dúvida, você está correto Florin. Eu estava trabalhando nesse projeto e descobri que esse trecho de código:
Pode ser substituído por:
fonte