Как отправить ссылку обратного вызова с Url.Action в пользовательском классе на ASP. NET MVC - PullRequest
1 голос
/ 14 января 2020

Я работаю над приложением для опроса в Asp. Net Mvc. Я выбираю список клиентов для соответствующего опроса со своей страницы и отправляю ссылку с GuidId этим людям из контроллера. Клиент, получающий письмо, будет перенаправлен на страницу опроса, нажав кнопку в письме. Однако, поскольку отправка почты может быть несколько, я отправляю почту в фоновую задачу после сохранения guid в базе данных. Фоновый флаг состоит из нескольких методов, которые вызывают друг друга в пользовательском классе. Чтобы создать ссылку callbackUrl, я передаю UrlHelper из контроллера в конструктор класса cutom. Я создаю URL обратного вызова в пользовательском классе следующим образом.

Где я делаю ошибку? В чем причина этой ошибки? Как решить эту проблему?

Я вызываю фоновую задачу в пользовательском классе следующим образом:

new EmailOperation (new UrlHelper (this.ControllerContext.RequestContext)). SendAsyn c (body Html, surveyId);

public class EmailOperation
{
    private UrlHelper _urlHelper;
    public EmailOperation(UrlHelper urlHelper)
    {
        _urlHelper = urlHelper;
    }

    public Task SendAsync(string bodyHtml, int? surveyId)
    {
        return Task.Factory.StartNew(() => { GetData(bodyHtml, surveyId); });
    }
}


 void GetData(string bodyHtml, int? surveyId)
{
  ...
  SendEmail(bodyHtml, surveyCustomers);
}




private void SendEmail(string bodyHtml, List<SurveyCustomers> surveyCustomers)
{
     foreach (SurveyCustomers surveyCustomer in surveyCustomers)
     {
         //_urlHelper is passed by my controller to this custom class
         string scheme = _urlHelper.RequestContext.HttpContext.Request.Url.Scheme;
         string callbackUrl = _urlHelper.Action("SubmitSurvey", "Survey", new { token }, scheme);//Error on this line


         SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", Convert.ToInt32(587));
          ...
         smtpClient.Send(msg);
     }
}

Но я получаю сообщение об ошибке следующим образом;

Исключение типа 'System.ArgumentException 'произошло в System.Web.dll, но не было обработано в коде пользователя

Дополнительная информация: значение не соответствует ожидаемому диапазону.

...