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