ASP.NET Core-无法使用Controller内的C#StreamReader读取静态HTML文件

时间:2019-07-19 13:43:20

标签: c# angular asp.net-core-2.1

我有一个asp.net核心项目,该项目带有带有以下文件结构的角度模板。

enter image description here

我想从模板文件夹中读取静态HTML文件( EmailConfirmation.html )。

我的代码,如下所示在控制器内部读取此文件。

string body = string.Empty;
using (StreamReader reader = new StreamReader("./Template/EmailConfirmation.html"))
{
body = reader.ReadToEnd();
}

但是当我将该应用程序发布为Azure时,在 wwwroot 文件夹中没有创建名为 Template 的文件夹。因此陷入错误

  

出了点问题:System.IO.DirectoryNotFoundException:无法   找到道路的一部分   'D:\ home \ site \ wwwroot \ Template \ EmailConfirmation.html'

请注意:我已经尝试了以下文章中提到的步骤

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-2.2

但是没有解决!

如何解决此问题。感谢您的关注。我期待着您的答复。

3 个答案:

答案 0 :(得分:2)

Stratup.cs

public void Configure(IApplicationBuilder app)
{
     app.UseStaticFiles(new StaticFileOptions()
     {
        FileProvider = new 
        PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"Templete")),
                RequestPath = new PathString("/Templete")
     });
}

控制器动作

string body = string.Empty;
//using streamreader for reading my htmltemplate   
using (StreamReader reader = new StreamReader(Path.Combine("Templetes", "EmailConfirmation.html")))
{
   body = reader.ReadToEnd();
}

答案 1 :(得分:0)

请注意,Group 1 is http://example.com/Test.aspx?u=b2 是(相对)URL,而不是文件名。 StreamReader不执行URL。尽管可以避免这种情况,但是您无法控制“当前目录”是什么,因此不应该依赖它。

在您的控制器中,注入"./Template/EmailConfirmation.html",然后开始使用IWebHostEnvironment env

_env.ContentRootPath

如果您仍想使用public MyController(IWebHostEnvironment env) { _env = env; } string fileName = Path.Combine(_env.ContentRootPath, "Template", "EmailConfirmation.html"); ,则还有一个WebRootPath属性。

答案 2 :(得分:0)

尝试一下:

using (var reader = File.OpenText(Path.Combine(@"./templates", $"{templateFileName}.html")))
        {
            return reader.ReadToEnd();
        }