我正在使用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)。对我来说更重要的是,它可以被禁用吗?
答案 0 :(得分:3)
我不确定你想要实现什么,但是关注事情是可行的。
“Wrap Long Lines”和与之相关的css是firefox浏览器的内部。
你是说你返回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");
}
请参阅我返回的IActionResult和使用内容。
原因是当你返回字符串时它将显示为字符串,如果它是html,那么它将被编码,因为你没有告诉浏览器内容类型所以它认为是“text / plain”。
答案 1 :(得分:1)
@ dotnetstep的替代方法是使用Produces
属性:
[HttpGet("/index")]
[Produces("text/html")]
public string Index()
{
...
}