从控制台应用程序需要应用程序URL

时间:2016-11-24 05:30:16

标签: asp.net asp.net-mvc

我在我的Web应用程序中创建了一个MVC Web应用程序和一个控制台应用程序,作为一个单独的项目。我希望此控制台应用程序以指定的时间间隔作为Windows服务运行。控制台应用程序用于向某些人发送邮件。我需要将我的应用程序URL包含在重定向到我的应用程序登录页面的邮件内容主体中。由于我为多个实例运行此服务,因此无法在代码中对URL进行硬编码。有人请帮忙。我尝试了下面的代码。但它返回空值。

 var site = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath.TrimEnd('/');
                var url = string.Format("<a href='{0}'>Login</a>", site);

1 个答案:

答案 0 :(得分:1)

我将此评论从评论转换为问题。

在没有可用的HttpContext的情况下,您正试图从HttpContext.Current获取信息 - 因为您的控制台应用程序是由操作系统直接启动的,而不是在传入的http请求的情况下启动的(因为选择了您的MVC应用程序中的请求处理) - 因此根本没有要使用的http上下文(因此HttpContext.Current在您的控制台应用程序中为空)。

您必须为控制台应用程序建立自己的应用程序逻辑,以确定在电子邮件中使用哪个URL。那将是什么取决于问题的答案“每个电子邮件中使用的网址具体取决于具体”?换句话说 - “每个电子邮件应该如何知道要使用的URL”?一旦你找到了这个问题的答案,你就可以想到如何将这种依赖关系传递给你的Windows服务。

示例(我不知道它是否描述了您的情况):

  • 不同网址上有多个网络应用
  • 这些Web应用程序中的每一个都可以将电子邮件添加到要发送的队列
  • Windows服务(控制台应用程序)计划一次运行一次,并通过发送电子邮件处理队列。每封电子邮件都必须有一个应用程序的URL,从中添加它。

假设上面的示例,您只需将电子邮件和应用程序的URL一起添加到队列中(只发送电子邮件),然后从控制台应用程序的队列中检索该信息。因此,每封电子邮件都有关联的URL。如何实现队列本身(SQL,文件......)无关紧要。