【问题标题】:Using MvcMailer from Global.asax使用 Global.asax 中的 MvcMailer
【发布时间】:2011-11-01 04:25:09
【问题描述】:

开发了一个 MVC3 应用程序,它可以监控用户何时访问 Web 服务器上的静态内容,每次都记入用户余额。此逻辑发生在 Global.asax 的“Application_AuthenticateRequest”事件中(我之前读过这是放置此类逻辑的正确位置)。

已实现 MvcMailer 以向用户发送各种通知(创建帐户、重置密码等)。我们想实现一个“低余额”通知,但似乎无法在“Application_AuthenticateRequest”发送一个通知,因为没有完整的 HttpContext 可用......?调用“PopulateBody”时出现的完整错误是:

ArgumentNullException was unhandled by user code.
Value cannot be null.
Parameter name: routeData

有什么建议可以解决这个问题吗?是否正在考虑在 Global.asax 的另一个活动中发送通知,但也需要针对静态内容触发...?

提前致谢!

【问题讨论】:

    标签: asp.net asp.net-mvc-3 httpcontext mvcmailer


    【解决方案1】:

    您可以在该请求的上下文中设置一些内容,然后在 Application_EndRequest 中读取(或确定)并从那里发送请求。更好的是,只需将其存储在缓存中并在 Application_EndRequest 上查找它,或者如果计数足够高,则在 EndRequest 上进行整个确定,等等。

    【讨论】:

    • 感谢您的建议。将整个调用移至 Application_EndRequest,但在调用“PopulateBody”时仍然出现相同的错误。仅供参考,堆栈指针位于:System.Web.dll!System.Web.Routing.RequestContext.RequestContext(System.Web.HttpContextBase httpContext, System.Web.Routing.RouteData routeData)
    • 好吧,试试 application_beginrequest 它基本上是一个寻找正确方法的游戏,因为这个问题似乎是在略有不同的情况下报告的,但没有解决方案。
    • 我也遇到了同样的问题。我不太明白建议的答案。没听说过 _EndRequest 等。有示例代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多