gpt4 book ai didi

c# - 在本地调试 Azure 函数提供了一个有趣的 AppDomain.CurrentDomain.BaseDirectory 路径

转载 作者:行者123 更新时间:2023-12-03 04:50:11 25 4
gpt4 key购买 nike

是否有更好的方法从我的解决方案中的 html 文件调用并获取我的电子邮件模板?

我从 Azure 函数项目和 ASP.Net MVC 项目调用“AppDomain.CurrentDomain.BaseDirectory”以获取电子邮件模板的路径。 (.html 文件)

但是从 Azure 函数进行的调用甚至不会返回解决方案中的路径!

简单来说,ASP.Net MVC 和 Azure 函数项目都调用另一个名为 projectName.Services 的项目中的 EmailService.cs 来构造电子邮件。

在这两个项目中,我都这样调用 EmailService.cs

_emailService.CancelEventSendHostEmail(value1, someObject, anotherObject, "someMessage");

在“CancelEventSendHostEmail”中我正在做这样的事情

CancelEventSendHostEmail(/*incoming properties*/) {

var outerTemplateHtml = GetEmailTemplate("email-outer-body-template.html");
var specificTemplate= GetEmailTemplate("someTemplate.html");
// do some work to fill in values in the email
// send the email
}

现在 GetEmailTemplate 看起来像这样

public StringBuilder GetEmailTemplate(string templateName)
{
string htmlAsString
= File.ReadAllText(Path.Combine(Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).ToString()).ToString(),
@"Yogabandy2017.Services\EmailingTemplates", templateName));
return new StringBuilder(htmlAsString);
}

现在,这可以很好地与 ASP.Net MVC 项目一起查找、获取和读取 HTML 模板文件中的字符串。 EmailService.cs 发现 ASP.Net MVC 项目中的文件没有问题,但是当我从 Azure 函数调用“GetEmailTemaplate”时,

AppDomain.CurrentDomain.BaseDirectory

path 返回不在项目或解决方案目录中的路径。

它返回一个如下所示的路径

C:\Users\chuckdawit\AppData\Local\AzureFunctionsTools\Releases\1.2.0\cli\

就好像我在 asp.net mvc 应用程序中,我在文本“AppDomain.CurrentDomain.BaseDirectory”中读到返回这样的路径

C:\Users\chuckdawit\Source\Workspaces\YogaBandy2017\YogaBandy2017\YogaBandy2017\

然后我可以在该项目的文件夹中搜索 html 电子邮件模板文件!

enter image description here

最佳答案

有 API 可以获取函数的当前文件夹:

public static HttpResponseMessage Run(HttpRequestMessage req, ExecutionContext context)
{
var message = $"You are in {context.FunctionDirectory}";
return req.CreateResponse(System.Net.HttpStatusCode.OK, message );
}

参见documentation :

FunctionDirectory: Provides the current function directory (e.g. when running on Azure, d:\home\site\wwwroot\HttpTrigger1)

请注意,在本地,它将位于 bin\debug 内。请仔细计划如何部署相对于功能文件夹的电子邮件模板。

一个明智的替代方案是将模板部署到 Blob 存储,然后使用输入绑定(bind)将它们加载到 Function 中,无需任何代码。

关于c# - 在本地调试 Azure 函数提供了一个有趣的 AppDomain.CurrentDomain.BaseDirectory 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50851149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com