我有一个asp.net核心项目,该项目带有带有以下文件结构的角度模板。
我想从模板文件夹中读取静态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
但是没有解决!
如何解决此问题。感谢您的关注。我期待着您的答复。
答案 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();
}