C# 如何在ASP.NET MVC的自定义类中发送带有Url.Action的回调链接
我正在Asp.NETMVC中开发一个调查应用程序。我从我的页面中选择相关调查的客户列表,并从controller向这些人发送一个带有GuidId的链接。通过单击邮件中的按钮,收到邮件的客户将被定向到调查页面。但是,由于发送邮件可以是多个,所以在将guid保存到数据库后,我将邮件提交到后台任务。后台标志由几个在自定义类中相互调用的方法组成。为了创建回调URL链接,我将UrlHelper从控制器传递到cutom类的cnstructor。我在自定义类中创建回调url,如下所示 我在哪里犯了错误?这个错误的原因是什么?如何解决此问题? 我在自定义类中调用后台任务,如下所示 新的EmailOperation(新的UrlHelper(this.ControllerContext.RequestContext)).SendAsync(bodyHtml,surveyId)C# 如何在ASP.NET MVC的自定义类中发送带有Url.Action的回调链接,c#,.net,asp.net-mvc,asp.net-mvc-4,url.action,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Url.action,我正在Asp.NETMVC中开发一个调查应用程序。我从我的页面中选择相关调查的客户列表,并从controller向这些人发送一个带有GuidId的链接。通过单击邮件中的按钮,收到邮件的客户将被定向到调查页面。但是,由于发送邮件可以是多个,所以在将guid保存到数据库后,我将邮件提交到后台任务。后台标志由几个在自定义类中相互调用的方法组成。为了创建回调URL链接,我将UrlHelper从控制器传递到cutom类的cnstructor。我在自定义类中创建回调url,如下所示 我在哪里犯了错误?这个错
公共类电子邮件操作
{
私人UrlHelper _UrlHelper;
公共电子邮件操作(UrlHelper UrlHelper)
{
_urlHelper=urlHelper;
}
公共任务SendAsync(字符串bodyHtml,int?surveyId)
{
返回Task.Factory.StartNew(()=>{GetData(bodyHtml,surveyId);});
}
}
void GetData(字符串bodyHtml,int?surveyId)
{
...
SendEmail(bodyHtml、surveyCustomers);
}
私有void sendmail(字符串bodyHtml,列表调查客户)
{
foreach(调查客户调查客户中的调查客户)
{
//_urlHelper由我的控制器传递到此自定义类
字符串方案=_urlHelper.RequestContext.HttpContext.Request.Url.scheme;
string callbackUrl=_urlHelper.Action(“SubmitSurvey”,“Survey”,new{token},scheme);//此行出错
SmtpClient SmtpClient=新的SmtpClient(“smtp.gmail.com”,Convert.ToInt32(587));
...
smtpClient.Send(msg);
}
}
但我得到一个错误如下
System.Web.dll中发生“System.ArgumentException”类型的异常,但未在用户代码中处理
其他信息:该值不在预期范围内
您正在使用助手对象从父线程异步传递RequestContext。您是否尝试用当前请求实例化新的帮助程序?e、 g.
var\u urlHelper=新的urlHelper(Request.RequestContext)
在您的sendmail
方法中?是的,我尝试过,请求在当前上下文中不存在错误发生您正在从父线程与助手对象异步传递RequestContext。您是否尝试用当前请求实例化新的帮助程序?e、 g.var\u urlHelper=新的urlHelper(Request.RequestContext)
在您的sendmail
方法中?是的,我尝试过,请求在当前上下文中不存在,出现错误
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);
}
}