ミドルウェアクラスの内部では、必要なインターフェイスへのアクセスを得るために参照を追加する必要があります。このミドルウェアは別のプロジェクトにあり、このNuGetパッケージを追加する必要がありました。
using Microsoft.AspNetCore.Mvc.ViewFeatures;
これにより、ミドルウェア内で正しいサービスを要求することができます。あなたはコントローラ内TempDataをを使用するように
//get TempData handle
ITempDataDictionaryFactory factory = httpContext.RequestServices.GetService(typeof(ITempDataDictionaryFactory)) as ITempDataDictionaryFactory;
ITempDataDictionary tempData = factory.GetTempData(httpContext);
あなたはITempDataDictionaryを持った後、あなたはそれを使用することができます。
//pass reference number to error controller
Guid ReferenceNum = Guid.NewGuid();
tempData["ReferenceNumber"] = ReferenceNum.ToString();
//log error details
logger.LogError(eventID, exception, ReferenceNum.ToString() + " - " + exception.Message);
は今、私は、参照番号を引き抜くと、私の見解では、それを使って何の問題を持っていない、リダイレクト後にコントローラを得るとき。
//read value in controller
string refNum = TempData["ReferenceNumber"] as string;
if (!string.IsNullOrEmpty(refNum))
ViewBag.ReferenceNumber = refNum;
@*display reference number if one was provided*@
@if (ViewBag.ReferenceNumber != null){<p>Reference Number: @ViewBag.ReferenceNumber</p>}
これをまとめて入力すると、問題のトラブルシューティングに役立つ参照番号がユーザーに表示されます。しかし、潜在的に機密性の高いエラー情報を誤って渡すことはありません。