web-dev-qa-db-ja.com

ASP.NET Web APIからHTMLを返す

ASP.NET MVC Web APIコントローラーからHTMLを返す方法は?

以下のコードを試しましたが、Response.Writeが定義されていないため、コンパイルエラーが発生しました。

public class MyController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post()
    {
        Response.Write("<p>Test</p>");
        return Request.CreateResponse(HttpStatusCode.OK);
    }
 }
98
Andrus

HTML文字列を返す

メディアタイプtext/htmlの文字列コンテンツを返します。

public HttpResponseMessage Get()
{
    var response = new HttpResponseMessage();
    response.Content = new StringContent("<html><body>Hello World</body></html>");
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response;
}

ASP.NET Core

最も簡単な方法は、「生成」フィルターを使用することです。

[Produces("text/html")]
public string Get() 
{
    return "<html><body>Hello World</body></html>";
}

[Produces]属性の詳細については、 こちら をご覧ください。

212
Andrei

AspNetCore 2.0以降では、この場合、ContentResult属性の代わりにProduceを使用することをお勧めします。参照: https://github.com/aspnet/Mvc/issues/6657#issuecomment-322586885

これは、シリアル化にもコンテンツネゴシエーションにも依存しません。

[HttpGet]
public ContentResult Index() {
    return new ContentResult {
        ContentType = "text/html",
        StatusCode = (int)HttpStatusCode.OK,
        Content = "<html><body>Hello World</body></html>"
    };
}
44
KTCO