私はEmailerクラスを持っています。依存関係注入を使用して、電子メールで送信するビューの内容を取得する電子メールを送信しています。ビューは、使用するなど、基本となるURLのヘルパーへの呼び出しが含まれていない限り、私が持っているプロセスは、素晴らしい作品。このようなタグ:ASP.NET Coreの文字列へのURLを含むRazor Viewをレンダリングします
ここ<a asp-controller="Project" asp-action="List">Open</a>
私は文字列にビューをレンダリングするために使用していたコードは次のとおりです。
private string renderViewAsString<TModel>(string folder, string viewName, TModel model)
{
var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider };
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
var viewEngineResult = _viewEngine.FindView(actionContext, folder + "/" + viewName, false);
var view = viewEngineResult.View;
var viewData = new ViewDataDictionary<TModel>(new EmptyModelMetadataProvider(), new ModelStateDictionary());
viewData.Model = model;
var tempData = new TempDataDictionary(httpContext, _tempDataProvider);
using (var output = new StringWriter())
{
var viewContext = new ViewContext(actionContext, view, viewData, tempData, output, new HtmlHelperOptions());
var task = view.RenderAsync(viewContext);
task.Wait();
return output.ToString();
}
}
_serviceProviderはタイプIServiceProviderであり、_viewEngineはタイプIRazorViewEngineであり、どちらもコンストラクタに挿入されます。
それはURLヘルパーを参照している場合、それはtask.Wait()ラインでこの例外を生成します。コールスタックとしてこれと
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
:
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Microsoft.AspNetCore.Mvc.Routing.UrlHelper.get_Router()
at Microsoft.AspNetCore.Mvc.Routing.UrlHelper.GetVirtualPathData(String routeName, RouteValueDictionary values)
at Microsoft.AspNetCore.Mvc.Routing.UrlHelper.Action(UrlActionContext actionContext)
at Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(IUrlHelper helper, String action, String controller, Object values, String protocol, String host, String fragment)
at Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateActionLink(ViewContext viewContext, String linkText, String actionName, String controllerName, String protocol, String hostname, String fragment, Object routeValues, Object htmlAttributes)
at Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Process(TagHelperContext context, TagHelperOutput output)
at Microsoft.AspNetCore.Razor.TagHelpers.TagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output)
at Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.<RunAsync>d__0.MoveNext()
私はこの問題を回避するにはどうすればよいですA要素や電子メールの内容をハードコーディングする必要はありませんか?
ありがとう!その仕事は完璧に今! –
今日はこの修正が必要でしたので、ドキュメントを書いてうれしいです。ありがとうございました! –
これは私を救った!これはASP CORE 2で動作します。誰かを助けることを願っています。 –