为什么.net core" Return"控制器内的动词添加" plaintext.css" ?

时间:2016-11-14 12:47:03

标签: asp.net-mvc asp.net-core

我正在使用MVC6 .net核心进行一些测试,并通过将dirtyHTML直接放在控制器中来快速修复返回bootstrap html代码。 HTML包含文字字符串中的bootstrap的官方示例。 只是一种快速返回一些bootstrap html的方法(当我试验控制器功能时),当我使用Web浏览器访问页面时,我惊讶的是,所有html文本都显示为纯文本,未呈现。

namespace WebApplication1.Controllers 
{
 public class MariaController
 {
    [HttpGet("/index")]
    public string index()
    {
        string dirtyHtml;

      dirtyHtml = 
            @"<!DOCTYPE html>
            <html lang=""en"">
            <head>
              <title>Bootstrap Example</title>
              <meta charset=""utf-8"">
              <meta name=""viewport"" content=""width=device-width, initial-scale=1"">
              <link rel=""stylesheet"" href=""https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"">
              <script src=""https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js""></script>
              <script src=""https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js""></script>
            </head>
            <body>

            <div class=""container"">
              <h1>My First Bootstrap Page</h1>
            ";

        return dirtyHtml;
    }
   }

当进入调试模式时,最初它们显示相同的asci文本,但是使用firefox我看到在我的页面代码之前插入了一行:

<HTML><head>
<link rel="alternate stylesheet" type="text/css" 
  href="resource://gre-resources/plaintext.css" 
  title="Wrap Long Lines">`

然后我想,让我们在解决方案中四处寻找并搜索&#34; Wrap Long Lines&#34; ...以查看它来自哪里,......但是找不到。

那么它来自哪里? (因为解决方案也不包含plaintext.css)。对我来说更重要的是,它可以被禁用吗?

2 个答案:

答案 0 :(得分:3)

我不确定你想要实现什么,但是关注事情是可行的。

  1. “Wrap Long Lines”和与之相关的css是firefox浏览器的内部。

  2. 你是说你返回html并且它显示为html但是它不会呈现html,并为此做了以下事情。

    [HttpGet("/index")]
    public IActionResult index()
    {
        string dirtyHtml;
    
      dirtyHtml = 
            @"<!DOCTYPE html>
            <html lang=""en"">
            <head>
              <title>Bootstrap Example</title>
              <meta charset=""utf-8"">
              <meta name=""viewport"" content=""width=device-width, initial-scale=1"">
              <link rel=""stylesheet"" href=""https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"">
              <script src=""https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js""></script>
              <script src=""https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js""></script>
            </head>
            <body>
    
            <div class=""container"">
              <h1>My First Bootstrap Page</h1>
            ";
    
        return Content(dirtyHtml,"text/html");
    }
    
  3. 请参阅我返回的IActionResult和使用内容。

    原因是当你返回字符串时它将显示为字符串,如果它是html,那么它将被编码,因为你没有告诉浏览器内容类型所以它认为是“text / plain”。

答案 1 :(得分:1)

@ dotnetstep的替代方法是使用Produces属性:

[HttpGet("/index")]
[Produces("text/html")]
public string Index()
{
   ...
}