为什么我收到“值不在预期范围内”
本文关键字:范围内 为什么 | 更新日期: 2023-09-27 18:36:44
我有一个 asp.net mvc Web 应用程序,一些外部 cron 作业正在从我的CronJobController
调用特定的 url 并执行一个特定的方法,例如:
/// <summary>
/// Will be called externally by www.setcronjob.com.
/// </summary>
/// <returns></returns>
public async Task<ActionResult> Index()
{
RunTwitterSearchQuery();
RunFacebookSearchQuery();
return new ContentResult { Content = "Ok" };
}
在RunTwitterSearchQuery中,我想发送一些电子邮件,例如,我尝试了MvcMailer和ActionMailer(使用ActionMailer):
var mailController = new MailController();
mailController.HttpContextBase = this.HttpContext;
mailController.MoreThanXFollowersEmail(alertEmailModel).Deliver();
因为 http 上下文为空,所以我必须以这种方式设置它以避免 NPE,但之后我收到一个非常奇怪的异常(在 MvcMailer 和 ActionMailer 中):
System.ArgumentException: Value does not fall within the expected range.
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
at System.Web.Hosting.IIS7WorkerRequest.GetUserAgentInternal()
at System.Web.Hosting.IIS7WorkerRequest.GetKnownRequestHeader(Int32 index)
at System.Web.HttpRequest.get_UserAgent()
at System.Web.HttpRequestWrapper.get_UserAgent()
at System.Web.WebPages.BrowserHelpers.GetOverriddenUserAgent(HttpContextBase httpContext)
at System.Web.WebPages.BrowserHelpers.GetOverriddenBrowser(HttpContextBase httpContext, Func`2 createBrowser)
at System.Web.WebPages.BrowserHelpers.GetOverriddenBrowser(HttpContextBase httpContext)
at System.Web.WebPages.DisplayModeProvider.<.ctor>b__2(HttpContextBase context)
at System.Web.WebPages.DefaultDisplayMode.CanHandleContext(HttpContextBase httpContext)
at System.Web.WebPages.DisplayModeProvider.<>c__DisplayClass6.<GetAvailableDisplayModesForContext>b__5(IDisplayMode mode)
at System.Linq.Enumerable.WhereListIterator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations)
at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache)
at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.<FindView>b__a(IViewEngine e)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths)
at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName)
at ActionMailer.Net.Mvc.EmailResult.LocateViews(ControllerContext context) in c:'Dev'actionmailer'src'ActionMailer.Net.Mvc'EmailResult.cs:line 127
at ActionMailer.Net.Mvc.EmailResult.AddMessageViews(ControllerContext context) in c:'Dev'actionmailer'src'ActionMailer.Net.Mvc'EmailResult.cs:line 155
at ActionMailer.Net.Mvc.EmailResult.ExecuteResult(ControllerContext context) in c:'Dev'actionmailer'src'ActionMailer.Net.Mvc'EmailResult.cs:line 98
at ActionMailer.Net.Mvc.MailerBase.Email(String viewName, Object model, String masterName, Boolean trimBody) in c:'Dev'actionmailer'src'ActionMailer.Net.Mvc'MailerBase.cs:line 166
at SocialCrm.Controllers.MailController.MoreThanXFollowersEmail(AlertEmailModel model) in c:'dev'palminfo'SocialCrm'SocialCrm'Controllers'MailController.cs:line 18
at SocialCrm.Controllers.CronJobController.SendAlertEmail(SearchResultModel searchResultModel, Int32 searchQueryId, List`1 alerts, String emailTo, String streamName) in c:'dev'palminfo'SocialCrm'SocialCrm'Controllers'Batch'CronJobController.cs:line 146
at SocialCrm.Controllers.CronJobController.<RunTwitterSearchQuery>b__3() in c:'dev'palminfo'SocialCrm'SocialCrm'Controllers'Batch'CronJobController.cs:line 83
这是非常丑陋的,我真的很感激在这个问题上的任何帮助。
更新:使用MvcMailer时,这是我收到的错误。
如果您使用的是 MvcMailer,请尝试在 github 上发布的解决方案,以解决一个非常相似的问题。解决方案是每次发送电子邮件时创建一个新的UserMailer:Github答案