Metti il ​​contenuto nell’object HttpResponseMessage?

Diversi mesi fa, Microsoft ha deciso di modificare la class HttpResponseMessage. Prima, si poteva semplicemente passare un tipo di dati nel costruttore e quindi restituire il messaggio con quei dati, ma non più.

Ora, è necessario utilizzare la proprietà Content per impostare il contenuto del messaggio. Il problema è che è di tipo HttpContent e non riesco a trovare un modo per convertire una stringa, ad esempio in HttpContent.

Qualcuno sa come affrontare questo problema? Molte grazie.

In particolare per una stringa, il modo più rapido è utilizzare il costruttore StringContent

response.Content = new StringContent("Your response text"); 

Esistono numerosi discendenti della class HttpContent per altri scenari comuni.

Dovresti creare la risposta usando Request.CreateResponse :

 HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Error message"); 

È ansible passare oggetti non solo stringhe a CreateResponse e li serializzerà in base all’intestazione Accept della richiesta. Ciò ti consente di non scegliere manualmente un formattatore.

Apparentemente il nuovo modo di farlo è dettagliato qui:

http://aspnetwebstack.codeplex.com/discussions/350492

Per citare Henrik,

 HttpResponseMessage response = new HttpResponseMessage(); response.Content = new ObjectContent(T, myFormatter, “application/some-format”); 

Quindi, in pratica, è necessario creare un tipo ObjectContent, che apparentemente può essere restituito come object HttpContent.

Per qualsiasi object T puoi fare:

 return Request.CreateResponse(HttpStatusCode.OK, Tobject); 

La soluzione a linea singola più semplice è quella da utilizzare

 return new HttpResponseMessage( HttpStatusCode.OK ) {Content = new StringContent( "Your message here" ) }; 

Per contenuti JSON serializzati:

 return new HttpResponseMessage( HttpStatusCode.OK ) {Content = new StringContent( SerializedString, System.Text.Encoding.UTF8, "application/json" ) }; 

Puoi creare i tuoi tipi di contenuti specializzati. Ad esempio uno per il contenuto di Json e uno per il contenuto Xml (quindi assegnale a HttpResponseMessage.Content):

 public class JsonContent : StringContent { public JsonContent(string content) : this(content, Encoding.UTF8) { } public JsonContent(string content, Encoding encoding) : base(content, encoding, "application/json") { } } public class XmlContent : StringContent { public XmlContent(string content) : this(content, Encoding.UTF8) { } public XmlContent(string content, Encoding encoding) : base(content, encoding, "application/xml") { } } 

Ispirato dalla risposta di Simon Mattes, avevo bisogno di soddisfare IHttpActionResult richiesto tipo di risposta di ResponseMessageResult. Usando anche JsonContent di nashawn, ho finito con …

  return new System.Web.Http.Results.ResponseMessageResult( new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new JsonContent($"{JsonConvert.SerializeObject(contact, Formatting.Indented)}") }); 

Vedi la risposta di nashawn per JsonContent.

Non c’è dubbio che tu abbia ragione Florin. Stavo lavorando a questo progetto e ho scoperto che questo pezzo di codice:

 product = await response.Content.ReadAsAsync(); 

Potrebbe essere sostituito con:

 response.Content = new StringContent(string product);