如何在ASP.NET MVC应用程序的后台请求本地页面?

时间:2010-05-27 14:13:58

标签: asp.net-mvc

我的ASP.NET MVC应用程序需要在启动时和后台定期运行一组任务。我已将每个任务实现为控制器操作,并列出了数据库中操作的应用程序相对路径。我实现了一个TaskRunner进程,该进程从数据库获取url并使用WebRequest.Create定期请求每个url,但这会引发UriFormatException。我无法使用this answer或任何从HttpContext.Current.Request获取值的代码,而不会在HttpException中收到消息“请求在此上下文中不可用”。 Request对象不可用,因为我的代码使用System.Threading.Timer进行后台处理,如建议的here。以下是我的问题:

  1. 是否真的无法在ASP.NET Web应用程序中发出本地Web请求?
  2. 即使在ASP.NET中使用静态依赖项,是否真的无法动态确定Web应用程序的根路径?
  3. 我试图避免将应用程序的根路径存储在数据库中(正如FogBugz的“维护路径”所做的那样),但这是最佳选择吗?

2 个答案:

答案 0 :(得分:1)

您应该可以访问Application_Start处理程序中的当前请求。您是否可以在创建TaskRunner类时简单地注入您需要获取的值,并且只是从那里重用它而不是每次尝试获取它们?

protected void Application_Start()
{
    ...
    var baseUri = this.Context.Request.Url.GetLeftPart( UriPartial.Authority );
    var runner = new TaskRunner( baseUri );
    runner.Run();
    ...
}

答案 1 :(得分:0)

可以使ASP.NET MVC实现可由外部服务调用的RESTful API:

http://omaralzabir.com/create_rest_api_using_asp_net_mvc_that_speaks_both_json_and_plain_xml/

上面的文章讨论了JSON,但是你可以实现你需要定期运行的任务作为RESTful操作,只需调用它们的URI即可执行。