gpt4 book ai didi

asp.net-mvc - 在子站点中使用 Postal 和 Hangfire

转载 作者:行者123 更新时间:2023-12-05 06:42:56 26 4
gpt4 key购买 nike

我一直在尝试在我的 MVC5 网站上使用 Postal。当我托管我的网页时,一个子站点即 http://localhost/Subsite我收到错误信息

  • 虚拟路径“/”映射到另一个应用程序,这是不允许的

我已将其调试到创建 ControllerContext 时 HttpContext 未正确设置。由于我从 Hangfire 运行 Postal,因此 HttpContext.Current 始终为空。 Postal 使用以下代码创建 ContollerContext。

        ControllerContext CreateControllerContext()
{
// A dummy HttpContextBase that is enough to allow the view to be rendered.
var httpContext = new HttpContextWrapper(
new HttpContext(
new HttpRequest("", UrlRoot(), ""),
new HttpResponse(TextWriter.Null)
)
);
var routeData = new RouteData();
routeData.Values["controller"] = EmailViewDirectoryName;
var requestContext = new RequestContext(httpContext, routeData);
var stubController = new StubController();
var controllerContext = new ControllerContext(requestContext, stubController);
stubController.ControllerContext = controllerContext;
return controllerContext;
}

string UrlRoot()
{
var httpContext = HttpContext.Current;
if (httpContext == null)
{
return "http://localhost";
}

return httpContext.Request.Url.GetLeftPart(UriPartial.Authority) +
httpContext.Request.ApplicationPath;
}

我如何指定 UrlRoot,而不是根据我的子站点拉取默认的 localhost 来拉取它?

最佳答案

我按照这里的指示操作 http://docs.hangfire.io/en/latest/tutorials/send-email.html发送我的电子邮件。教程中的方法如下

    public static void NotifyNewComment(int commentId)
{
// Prepare Postal classes to work outside of ASP.NET request
var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails"));
var engines = new ViewEngineCollection();
engines.Add(new FileSystemRazorViewEngine(viewsPath));

var emailService = new EmailService(engines);

// Get comment and send a notification.
using (var db = new MailerDbContext())
{
var comment = db.Comments.Find(commentId);

var email = new NewCommentEmail
{
To = "yourmail@example.com",
UserName = comment.UserName,
Comment = comment.Text
};

emailService.Send(email);
}
}

我发现问题是 FileSystemRazorViewEngine 没有被邮政使用。为了让它工作,我必须确保 FileSystemRazorViewEngine 是可用的第一个引擎。然后我删除了它,因为我不希望它成为默认引擎。以下是我更新的方法。

    public static void NotifyNewComment(int commentId)
{
// Prepare Postal classes to work outside of ASP.NET request
var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails"));
var eng = new FileSystemRazorViewEngine(viewsPath));
ViewEngines.Engines.Insert(0, eng);

var emailService = new EmailService(engines);

// Get comment and send a notification.
using (var db = new MailerDbContext())
{
var comment = db.Comments.Find(commentId);

var email = new NewCommentEmail
{
To = "yourmail@example.com",
UserName = comment.UserName,
Comment = comment.Text
};

emailService.Send(email);
ViewEngines.Engines.RemoveAt(0)
}
}

关于asp.net-mvc - 在子站点中使用 Postal 和 Hangfire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35389505/

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