¿Cómo devolver una cadena sin formato con ApiController?

Tengo un ApiController que sirve XML / JSON, pero me gustaría que una de mis acciones devuelva HTML puro. Intenté el siguiente pero todavía devuelvo XML / JSON.

public string Get() { return "test"; } 

Esto es lo que regresa arriba:

 <strong>test</strong> 

¿Hay alguna manera de devolver solo el texto puro, sin escabullirse sin las tags XML que lo rodean (tal vez un tipo diferente de atributo de acción de devolución)?

Podría hacer que su acción Api Web devuelva un HttpResponseMessage para el que tenga control total sobre el Contenido. En su caso, puede usar un StringContent y especificar el tipo de contenido correcto:

 public HttpResponseMessage Get() { return new HttpResponseMessage() { Content = new StringContent( "test", Encoding.UTF8, "text/html" ) }; } 

Otra posible solución En Web API 2 utilicé el método base.Content () de APIController :

  public IHttpActionResult Post() { return base.Content(HttpStatusCode.OK, new {} , new JsonMediaTypeFormatter(), "text/plain"); } 

Necesitaba hacer esto para evitar un error IE9 donde intentaba descargar contenido JSON. Esto también debería funcionar para datos de tipo XML utilizando el formateador de medios XmlMediaTypeFormatter .

Espero que ayude a alguien.

Solo return Ok(value) no funcionará, se tratará como IEnumerable .

En su lugar, use return Ok(new { Value = value }) o simillar.

Debemos esforzarnos por no devolver html sino datos puros de nuestras API y formatear los datos en consecuencia en la interfaz de usuario, pero tal vez pueda usar:

 return this.Request.CreateResponse(HttpStatusCode.OK, new{content=YourStringContent}) 

esto funciona para mi

Llamo al siguiente método de controlador webapi2 desde un método de controlador mvc:

  Public Function TestApiCall( screenerRequest As JsonBaseContainer) As IHttpActionResult Dim response = Me.Request.CreateResponse(HttpStatusCode.OK) response.Content = New StringContent("{""foo"":""bar""}", Encoding.UTF8, "text/plain") Return ResponseMessage(response) End Function 

Lo llamo de esta rutina en el servidor asp.net:

 Public Async Function PostJsonContent(baseUri As String, requestUri As String, content As String, Optional timeout As Integer = 15, Optional failedResponse As String = "", Optional ignoreSslCertErrors As Boolean = False) As Task(Of String) Return Await PostJsonContent(baseUri, requestUri, New StringContent(content, Encoding.UTF8, "application/json"), timeout, failedResponse, ignoreSslCertErrors) End Function Public Async Function PostJsonContent(baseUri As String, requestUri As String, content As HttpContent, Optional timeout As Integer = 15, Optional failedResponse As String = "", Optional ignoreSslCertErrors As Boolean = False) As Task(Of String) Dim httpResponse As HttpResponseMessage Using handler = New WebRequestHandler If ignoreSslCertErrors Then handler.ServerCertificateValidationCallback = New Security.RemoteCertificateValidationCallback(Function(sender, cert, chain, policyErrors) True) End If Using client = New HttpClient(handler) If Not String.IsNullOrWhiteSpace(baseUri) Then client.BaseAddress = New Uri(baseUri) End If client.DefaultRequestHeaders.Accept.Clear() client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) client.Timeout = New TimeSpan(TimeSpan.FromSeconds(timeout).Ticks) httpResponse = Await client.PostAsync(requestUri, content) If httpResponse.IsSuccessStatusCode Then Dim response = Await httpResponse.Content.ReadAsStringAsync If Not String.IsNullOrWhiteSpace(response) Then Return response End If End If End Using End Using Return failedResponse End Function 

Si está utilizando MVC en lugar de WebAPI, puede usar la base. Método de contenido:

 return base.Content(result, "text/html", Encoding.UTF8);