我有一个.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的内容?
答案 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);
}