C# 我的电子邮件模板似乎为空。-提供RenderToStringAsync上的错误
每次,就像试图发送电子邮件一样,我都不会被发送,但它会说:C# 我的电子邮件模板似乎为空。-提供RenderToStringAsync上的错误,c#,asp.net-core-2.0,C#,Asp.net Core 2.0,每次,就像试图发送电子邮件一样,我都不会被发送,但它会说: 处理请求时发生未处理的异常。 ArgumentNullException:值不能为null。参数名称: 模板/NewPassword与任何可用视图都不匹配 这就是我试图在这里寻找的方式。- 请在此处输入代码: var resultMail = await _viewRenderService.RenderToStringAsync("Templates/NewPassword", viewModel); //ERROR HERE!
处理请求时发生未处理的异常。 ArgumentNullException:值不能为null。参数名称: 模板/NewPassword与任何可用视图都不匹配 这就是我试图在这里寻找的方式。- 请在此处输入代码:
var resultMail = await _viewRenderService.RenderToStringAsync("Templates/NewPassword", viewModel); //ERROR HERE!
var client = new SendGridClient(m.azureName());
var from = new EmailAddress(m.mailFrom(), m.nameFrom());
var to = new EmailAddress(mail, UserValue.Navn);
var plainTextContent = Regex.Replace(resultMail, "<[^>]*>", "");
var msg = MailHelper.CreateSingleEmail(from, to, title, plainTextContent: plainTextContent,
htmlContent: null);
var resulta = client.SendEmailAsync(msg);
return RedirectToAction("UserPassword");
var resultMail=wait _viewRenderService.RenderToStringAsync(“模板/NewPassword”,viewModel)//这里出错了!
var client=new SendGridClient(m.azureName());
var-from=新的电子邮件地址(m.mailFrom(),m.nameFrom());
var to=新的电子邮件地址(mail,UserValue.Navn);
var plainTextContent=Regex.Replace(结果邮件,]*>,“”);
var msg=MailHelper.CreateSingleEmail(发件人、收件人、标题、明文内容:明文内容、,
htmlContent:null);
var resulta=client.sendmailasync(msg);
返回重定向操作(“用户密码”);
RenderToStringAsync代码在这里-我写了一个错误,在这里错误出现了
public async Task<string> RenderToStringAsync(string viewName, object model)
{
var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider };
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
using (var sw = new StringWriter())
{
var viewResult = _razorViewEngine.FindView(actionContext, viewName, false);//ERROR HERE
if (viewResult.View == null)
{
throw new ArgumentNullException($"{viewName} does not match any available view");
}
var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
{
Model = model
};
var viewContext = new ViewContext(actionContext, viewResult.View, viewDictionary, new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),
sw,
new HtmlHelperOptions()
);
await viewResult.View.RenderAsync(viewContext);
return sw.ToString();
}
}
公共异步任务RenderToStringAsync(字符串视图名称,对象模型)
{
var httpContext=newdefaulthttpcontext{RequestServices=\u serviceProvider};
var actionContext=new actionContext(httpContext,new RouteData(),new ActionDescriptor());
使用(var sw=new StringWriter())
{
var viewResult=_razorViewEngine.FindView(actionContext,viewName,false);//此处出错
if(viewResult.View==null)
{
抛出新ArgumentNullException($“{viewName}与任何可用视图都不匹配”);
}
var viewDictionary=new ViewDataDictionary(new EmptyModelMetadataProvider(),new ModelStateDictionary())
{
模型
};
var viewContext=newviewcontext(actionContext、viewResult.View、viewDictionary、newtempdatadictionary(actionContext.HttpContext、_tempDataProvider),
西南,
新的HtmlHelpOptions()
);
等待viewResult.View.RenderAsync(viewContext);
返回sw.ToString();
}
}
您的
IViewRenderService.RenderToStringAsync()实现如何查找视图?如果您使用的是IRazorViewEngine
,ViewName
必须是完全限定的,包括文件扩展名ex“~/Views/Home/Index.cshtml”
尝试使用~/Views/Templates/NewPassword
检查samme问题@Jaxedin?那么就没有错误了,但是如果是我的邮件,问题就这么多了xxx@xxxx.com或者,如果应该是smtp.sendgrid.NetApp,则在处理请求时发生未经处理的异常。ArgumentNullException:值不能为null。参数名称:~/Views/Templates/NewPassword与任何可用视图不匹配相同错误是否在路径末尾包含.cshtml
?或者您的文件实际上只是命名为NewPassword
,没有任何扩展名?我假设您使用的字符串应该是“~/Views/Templates/NewPassword.cshtml”
刚刚注意到您的RenderToStringAsync()
函数依赖于\u razorViewEngine.FindView()
,我的使用\u razorViewEngine.GetView()
尝试将视图结果替换为\u razorViewEngine.GetView(““,viewName,false)代码>那么就没有错误了,但是如果是我的邮件,问题就来自电子邮件xxx@xxxx.com或者它是否应该是smtp.sendgrid.net@NeilIsRenderToStringAsync()
现在工作正常?如果是,请将此问题标记为已回答,并打开一个新问题,详细说明新问题是什么