-->

如何从另一个目录中的ActionResult提供HTML文件(How to serve html f

2019-06-25 00:40发布

我有,我想从一个控制器动作发球直HTML文件专门的情况。

我想从不是浏览文件夹之外的其他文件夹,为它服务。 该文件位于

Solution\Html\index.htm

我想从一个标准控制器的动作为它服务。 我能使用返回文件? 我如何做到这一点?

Answer 1:

如果你想呈现在浏览器这个index.htm文件,那么你可以创建这样的控制器操作:

public void GetHtml()
{
    var encoding = new System.Text.UTF8Encoding();
    var htm = System.IO.File.ReadAllText(Server.MapPath("/Solution/Html/") + "index.htm", encoding);
    byte[] data = encoding.GetBytes(htm);
    Response.OutputStream.Write(data, 0, data.Length);
    Response.OutputStream.Flush();
}

或者只是:

public ActionResult GetHtml()
{
    return File(Server.MapPath("/Solution/Html/") + "index.htm", "text/html"); 
}

因此,可以说这次行动是在家庭控制器和一些用户点击http://yoursite.com/Home/GetHtml然后index.htm的将被渲染。

编辑:2种的其他方法

如果你想看到在浏览器中的index.htm的原始的HTML:

public ActionResult GetHtml()
{
    Response.AddHeader("Content-Disposition", new System.Net.Mime.ContentDisposition { Inline = true, FileName = "index.htm"}.ToString());
    return File(Server.MapPath("/Solution/Html/") + "index.htm", "text/plain"); 
}

如果你只是想下载文件:

public FilePathResult GetHtml()
{
    return File(Server.MapPath("/Solution/Html/") + "index.htm", "text/html", "index.htm"); 
}


Answer 2:

看一下这个 :

    public ActionResult Index()
    {
        return new FilePathResult("~/Html/index.htm", "text/html");
    }


Answer 3:

我伸出瓦希德的答案创建HtmlResult

创建延伸FilePathResult的Html结果

public class HtmlResult : FilePathResult
{
    public HtmlResult(string path)
        : base(path, "text/html")
    {
    }
}

控制器上创建静态方法

public static HtmlResult Html(this Controller controller, string path)
{
    return new HtmlResult(path);
}

使用像我们返回查看

public HtmlResult Index()
{
    return this.Html("~/Index.html");
}

希望能帮助到你



Answer 4:

你可以在一个字符串读取HTML文件,并在行动回报呢? 它呈现为Html页面,如下图所示:

public string GetHtmlFile(string file)
{
    file = Server.MapPath("~/" + file);
    StreamReader streamReader = new StreamReader(file);
    string text = streamReader.ReadToEnd();
    streamReader.Close();
    return text;
}

首页/ GetHtmlFile?文件=解决方案\ HTML \ index.htm的

如果HTML文件的目标文件或存储机制很复杂,然后你可以在你的虚拟路径提供

虚拟路径提供MVC样本



Answer 5:

我希望把我的两分钱中,我发现这个最简洁,它的存在了。:

public ActionResult Index()
{
     var encoding = new System.Text.UTF8Encoding();
     var html = ""; //get it from file, from blob or whatever
     return this.Content(html, "text/html; charset=utf-8");
}


Answer 6:

如果使用的是.NET的核心另一种方法是使用FileProvider。 该文件可能是一个文件夹中或者嵌入在编译时。

在这个例子中,我们将使用嵌入的文件。

添加一个文件夹在您的项目让我们说资产,在其上创建文件myfile.html,添加一些基本的html文件说

<html>
<head>
  <title>Test</title>
</head>
<body>
   Hello World
</body>
</html>

右键单击新文件(假设你是在Visual Studio中)选择属性,在属性屏幕/生成操作,选择嵌入的资源。 这将文件添加到文件的csproj。

右键单击您的项目,编辑您的csproj文件。 请检查您的属性组包含以下内容:

<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>

如果没有,请添加它。 该的csproj也应包含新创建的HTML文件:

  <ItemGroup>
    <EmbeddedResource Include="assets\myfile.html" />
  </ItemGroup>

要在您的控制器读取该文件,并把它传递给客户端需要被添加到startup.cs文件提供

编辑您的startup.cs确保它包括HostingEnvironment:

private readonly IHostingEnvironment HostingEnvironment;
public Startup(IHostingEnvironment hostingEnvironment)
{
     HostingEnvironment = hostingEnvironment;
}

然后创建一个文件提供,并使其能够在运行时被注入的服务。 创建它,如下所示:

 var physicalProvider = HostingEnvironment.ContentRootFileProvider;
 var manifestEmbeddedProvider =
      new ManifestEmbeddedFileProvider(Assembly.GetEntryAssembly());
 var compositeProvider =
      new CompositeFileProvider(physicalProvider, manifestEmbeddedProvider);

 services.AddSingleton<IFileProvider>(compositeProvider);

要提供服务的文件到您的控制器,使用依赖注入来获得FileProvider,创建一个新的服务和提供服务的文件。 要做到这一点,通过增加供应到你的构造开始依赖注入。

IFileProvider _fileProvider;
public MyController(IFileProvider fileProvider)
{
    this._fileProvider = fileProvider;
}

然后使用文件提供的服务

[HttpGet("/myfile")]
[Produces("text/html")]
public Stream GetMyFile()
{
   // Use GetFileInfo to get details on the file passing in the path added to the csproj
   // Using the fileInfo returned create a stream and return it.
   IFileInfo fileinfo = _fileProvider.GetFileInfo("assets/myfile.html");
   return fileinfo.CreateReadStream();
}

欲了解更多信息请参阅ASP 的.Net核心文件提供样品与微软的文档在这里 。



文章来源: How to serve html file from another directory as ActionResult