XML / JSON을 제공하는 ApiController가 있지만 내 작업 중 하나가 순수한 HTML을 반환하고 싶습니다. 아래를 시도했지만 여전히 XML / JSON을 반환합니다.
public string Get()
{
return "<strong>test</strong>";
}
위의 결과는 다음과 같습니다.
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"><strong>test</strong></string>
주변 XML 태그없이 순수하고 이스케이프 처리되지 않은 텍스트 만 반환하는 방법이 있습니까 (다른 반환 유형의 작업 속성 일 수 있음)?
답변
웹 API 작업 HttpResponseMessage
이 콘텐츠를 완전히 제어 할 수 있는를 반환하도록 할 수 있습니다. 귀하의 경우에는 StringContent를 사용하고 올바른 콘텐츠 유형을 지정할 수 있습니다.
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent(
"<strong>test</strong>",
Encoding.UTF8,
"text/html"
)
};
}
또는
public IHttpActionResult Get()
{
return base.ResponseMessage(new HttpResponseMessage()
{
Content = new StringContent(
"<strong>test</strong>",
Encoding.UTF8,
"text/html"
)
});
}
답변
또 다른 가능한 해결책. Web API 2에서는 base.Content () 메서드를 사용했습니다 APIController
.
public IHttpActionResult Post()
{
return base.Content(HttpStatusCode.OK, new {} , new JsonMediaTypeFormatter(), "text/plain");
}
JSON 콘텐츠를 계속 다운로드하려는 IE9 버그를 해결하려면이 작업을 수행해야했습니다. 이것은 XML 유형 데이터에 대해서도 작동합니다.XmlMediaTypeFormatter
미디어 포맷터 .
누군가에게 도움이되기를 바랍니다.
답변
다만 return Ok(value)
그것은으로 간주됩니다 작동하지 않습니다 IEnumerable<char>
.
대신 return Ok(new { Value = value })
또는 유사하게 사용하십시오 .
답변
mvc 컨트롤러 메서드에서 다음 webapi2 컨트롤러 메서드를 호출합니다.
<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
답변
WebAPI가 아닌 MVC를 사용하는 경우 base.Content 메서드를 사용할 수 있습니다.
return base.Content(result, "text/html", Encoding.UTF8);
답변
우리는 html을 반환하지 않고 API에서 순수한 데이터를 반환하고 그에 따라 UI에서 데이터 형식을 지정해야하지만 다음을 사용할 수 있습니다.
return this.Request.CreateResponse(HttpStatusCode.OK,
new{content=YourStringContent})
그것은 나를 위해 작동합니다