从.Net Core控制器返回生成的HTML

时间:2019-05-13 22:55:14

标签: c# .net-core

我有一个.Net Core 2应用,该应用需要能够从控制器返回生成的HTML。我已经能够使它返回纯文本格式的HTML,但不能说服浏览器使用HTML并呈现它。提供HTML内容类型后,内容类型协商似乎会中断它,并且只会呈现406不可接受。

我尝试过的

(简体)选项-

    [HttpGet]
    [Produces("text/html")]
    public string Display()
    {
        return "<html><head><title>Testing</title><head><body>Hello, world!</body></html>";
    }

    [HttpGet]
    [Produces("text/html")]
    public HttpResponseMessage Display()
    {
        try
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("<html><head><title>Testing</title><head><body>Hello, world!</body></html>")
            };
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");

            return response;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            return new HttpResponseMessage(HttpStatusCode.InternalServerError);
        }
    }

    [HttpGet]
    [Produces("text/html")]
    public IActionResult Display()
    {
        var pageHtml = "<html><head><title>Testing</title><head><body>Hello, world!</body></html>";
        var result = StatusCode(200, pageHtml);
        result.ContentTypes.Add(new MediaTypeHeaderValue("text/html"));

        return StatusCode(200, pageHtml);
    }

我已经想到了RespectBrowserAcceptHeader和ReturnHttpNotAcceptable属性的所有组合,都尝试过Startup ConfigureServices方法,但是它们似乎没有什么不同。

谁能看到我错过的说服服务器只返回生成的HTML的内容?

1 个答案:

答案 0 :(得分:1)

您如何/为什么自己生成html?我认为,一个轻松的解决方案可能是制作一个ASP.NET Core 2 MVC应用程序。这将允许您使用ViewModels。我会看一下。

无论如何,请尝试返回Content ...,这将返回200的Http状态代码,并允许您返回一个字符串以及其他有关内容格式的详细信息。

[HttpGet]
[Produces("text/html")]
public IActionResult Display()
{
     return Content("<html><h1>hello world!</h1></html>", "text/html", Encoding.UTF8);
}