尝试在ActionResult中返回HTML会导致HTTP 406错误

时间:2017-12-02 07:42:32

标签: c# asp.net-mvc iframe asp.net-core-mvc

我正在尝试在ActionResult中返回HTML。我已经尝试过了:

[Produces("text/html")]
public ActionResult DisplayWebPage()
{
    return Content("<html><p><i>Hello! You are trying to view <u>something!</u></i></p></html>");
}

<iframe>中没有显示任何内容。我试过了:

[Produces("text/html")]
public string DisplayWebPage()
{
    return HttpUtility.HtmlDecode("<html><p><i>Hello! You are trying to view <u>something!</u></i></p></html>");
}

Microsoft Edge向我提供以下消息:

  

HTTP 406错误
  此页面不是我们的语言   Microsoft Edge无法显示此页面,因为它不是可以显示的格式。

Firefox和Chrome拒绝显示任何内容。我还尝试了HtmlEncode和普通ActionResult。以下是我视图中<iframe>的细分:

<div class="row">
    <div class="col-sm-12">
        <iframe src="/Home/DisplayWebPage" class="col-sm-12"></iframe>
    </div>
</div>

为什么我没有收到任何结果?我做错了吗?

2 个答案:

答案 0 :(得分:6)

有两种方法可以做到这一点: 1。将行动更新为:

flatten

2。将行动更新为:

public IActionResult Index()
{
    var content = "<html><body><h1>Hello World</h1><p>Some text</p></body></html>";
    return new ContentResult()
    {
        Content = content,
        ContentType = "text/html",
    };
}

并将startup.cs中的AddMvc行更新为:

[Produces("text/html")]
public IActionResult Index()
{
    return Ok("<html><p><i>Hello! You are trying to view <u>something!</u></i></p></html>");
}

其中HtmlOutputFormatter是:

services.AddMvc(options => options.OutputFormatters.Add(new HtmlOutputFormatter()));

答案 1 :(得分:5)

Produces("text/html")不会产生任何影响,因为HTML没有内置的输出格式化程序。

要解决您的问题,只需明确指定内容类型:

public ActionResult DisplayWebPage()
{
    return Content("<html><p><i>Hello! You are trying to view <u>something!</u></i></p></html>", "text/html");
}

另一种选择是通过string标题将您的操作的返回类型更改为text/html并请求Accept格式。有关详细信息,请参阅Introduction to formatting response