XML/JSONを提供するApiControllerがありますが、アクションの1つが純粋なHTMLを返すようにします。私は以下を試しましたが、それでもXML/JSONを返します。
public string Get()
{
return "<strong>test</strong>";
}
これは上記が返すものです:
<string xmlns="http://schemas.Microsoft.com/2003/10/Serialization/"><strong>test</strong></string>
周囲のXMLタグなしで、エスケープされていない純粋なテキストのみを返す方法はありますか(アクションタイプの異なる戻りタイプ)。
Web Apiアクションに、コンテンツを完全に制御できるHttpResponseMessage
を返すことができます。あなたの場合、StringContentを使用し、正しいコンテンツタイプを指定します。
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent(
"<strong>test</strong>",
Encoding.UTF8,
"text/html"
)
};
}
別の可能な解決策。 Web API 2では、APIController
のbase.Content()メソッドを使用しました。
public IHttpActionResult Post()
{
return base.Content(HttpStatusCode.OK, new {} , new JsonMediaTypeFormatter(), "text/plain");
}
JSONコンテンツをダウンロードしようとするIE9のバグを回避するには、これを行う必要がありました。これは、XmlMediaTypeFormatter
メディアフォーマッタを使用して、XMLタイプのデータでも機能するはずです。
それが誰かを助けることを願っています。
return Ok(value)
は機能しません。IEnumerable<char>
として扱われます。
代わりにreturn Ok(new { Value = value })
またはsimillarを使用してください。
WebAPIではなくMVCを使用している場合、base.Contentメソッドを使用できます。
return base.Content(result, "text/html", Encoding.UTF8);
次のwebapi2コントローラーメソッドをmvcコントローラーメソッドから呼び出します。
<HttpPost>
Public Function TestApiCall(<FromBody> 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
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