Как создать свой собственный http-контекст для контроллера? - PullRequest
2 голосов
/ 18 мая 2011

Я использую asp.net mvc 3 и кварцевый планировщик.

В настоящее время у меня есть это

  1. Задание создается и выполняется.
  2. Идет к контроллеру, где я сопоставляю домен для просмотра моделей с помощью автомпера
  3. Результаты отправляются на контроллер, где я хочу использовать Action Mailer

Я получаю ошибку

System.ArgumentNullException was unhandled by user code
  Message=Value cannot be null.
Parameter name: httpContext
  Source=System.Web
  ParamName=httpContext
  StackTrace:
       at System.Web.Routing.RequestContext..ctor(HttpContextBase httpContext, RouteData routeData)
       at ActionMailer.Net.MailerBase.Email(String viewName, Object model, String masterName)
       at EmailController.SendCalendarAppointmentNotifiation(CalendarAppointmentReminderVM vm) in EmailController.cs:line 73
       at RemindersController.CalendarAppointmentsReminders(List`1 taskReminders) in RemindersController.cs:line 54
       at QuartzJobs.AppointmentRemindersJob.Execute(JobExecutionContext context) in AppointmentRemindersJob.cs:line 39
       at Quartz.Core.JobRunShell.Run()
  InnerException: 

// Работа

public void Execute(JobExecutionContext context)
        {


                            // some code to do some checking and to get results above(not shown)
                            RemindersController remindersController = new RemindersController();
                            remindersController.CalendarAppointmentsReminders(calendarAppointmentReminders);

            }

// контроллер (для отображения) \

   public void CalendarAppointmentsReminders(List<AppointmentReminder> appointments)
        {
           List<CalendarAppointmentReminderVM> vm = Mapper.Map<List<CalendarAppointment>, List<CalendarAppointmentReminderVM>>(appointments.Select(x => x.CalendarAppointment).ToList());
            Mapper.Map<List<AppointmentReminder>, List<CalendarAppointmentReminderVM>>(appointments, vm);


            foreach (var v in vm)
            {
                new EmailController().SendCalendarAppointmentNotifiation(v);
            }

        }

// mvc mailer

 public EmailResult SendCalendarAppointmentNotifiation(CalendarAppointmentReminderVM vm)
        {
            To.Add(vm.To);
            Subject = String.Format("Subject");
            return Email("SendCalendarAppointmentEmail", vm);
        }

Умирает прямо на return Email("SendCalendarAppointmentEmail", vm); Я хочу использовать это, поскольку я использую его для рассылки всех моих других электронных писем, и я считаю, что это намного лучший способ отправки электронных писем (проще сделать их лучше, так как вы можете использовать главные страницы строго типизированные взгляды).

1 Ответ

0 голосов
/ 19 мая 2011

Выполнение задания Quartz не выполняется в запросе HttpRequest.Также HttpContext.Current имеет значение NULL.Кажется, что этот почтовый asp.net не работает без среды запросов asp.net (хавай взгляд на StackTrace)

checkout Визуализация представления в виде строки (представление представления, вставкав почту и отправьте ..), но, к сожалению, в этом посте все примеры также работают с текущим ControllerContext / HttpContext.

...