如何使用ApiController返回原始字符串?

Tru*_*an1 119 asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

我有一个提供XML/JSON的ApiController,但我希望我的一个动作可以返回纯HTML.我尝试了下面但它仍然返回XML/JSON.

public string Get()
{
    return "<strong>test</strong>";
}
Run Code Online (Sandbox Code Playgroud)

这就是上面的回报:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;strong&gt;test&lt;/strong&gt;</string>
Run Code Online (Sandbox Code Playgroud)

有没有办法只返回纯粹的,未转义的文本,甚至没有周围的XML标签(可能是一个不同的返回类型的动作属性)?

Dar*_*rov 211

您可以让您的Web Api操作返回HttpResponseMessage,您可以完全控制内容.在您的情况下,您可以使用StringContent并指定正确的内容类型:

public HttpResponseMessage Get()
{
    return new HttpResponseMessage()
    {
        Content = new StringContent(
            "<strong>test</strong>", 
            Encoding.UTF8, 
            "text/html"
        )
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 不,它不会工作.Web API仅内置XML和JSON格式化程序.对于其他一切,您将需要构建自己的格式化程序或从您的方法返回原始HttpResponseMessages,如我的答案所示. (4认同)

gar*_*ryp 7

另一种可能的解决 在Web API 2中,我使用了base.Content()方法APIController:

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

我需要这样做来解决一直在尝试下载JSON内容的IE9错误.这也适用于使用XmlMediaTypeFormatter媒体格式化程序的XML类型数据.

希望能帮助别人.


aba*_*hev 5

只是return Ok(value)行不通,它会受到威胁IEnumerable<char>

而是使用return Ok(new { Value = value })或类似。