138

XML/JSON を提供する ApiController がありますが、アクションの 1 つが純粋な HTML を返すようにしたいと考えています。以下を試しましたが、それでも XML/JSON が返されます。

public string Get()
{
    return "<strong>test</strong>";
}

これは上記が返すものです:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;strong&gt;test&lt;/strong&gt;</string>

周囲の XML タグ (アクション属性の戻り値の型が異なる可能性があります) なしで、エスケープされていない純粋なテキストだけを返す方法はありますか?

4

6 に答える 6

241

Web 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"
        )
    });
}
于 2012-12-26T21:27:39.347 に答える
10

別の可能な解決策。Web API 2 では、次の base.Content() メソッドを使用しましたAPIController

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

JSON コンテンツをダウンロードしようとし続ける IE9 のバグを回避するために、これを行う必要がありました。XmlMediaTypeFormatterこれは、メディア フォーマッタを使用することにより、XML タイプのデータに対しても機能するはずです。

それが誰かを助けることを願っています。

于 2016-10-06T15:14:39.283 に答える
1

WebAPI ではなく MVC を使用している場合は、base.Content メソッドを使用できます。

return base.Content(result, "text/html", Encoding.UTF8);
于 2017-11-20T12:01:02.193 に答える