Innerhalb der Middleware-Klasse müssen Sie eine Referenz hinzufügen, um Zugriff auf die erforderlichen Schnittstellen zu erhalten. Ich habe diese Middleware in einem separaten Projekt und musste dieses NuGet-Paket hinzufügen.
using Microsoft.AspNetCore.Mvc.ViewFeatures;
Dies ermöglicht Ihnen dann, die richtigen Dienste innerhalb der Middleware anzufordern.
//get TempData handle
ITempDataDictionaryFactory factory = httpContext.RequestServices.GetService(typeof(ITempDataDictionaryFactory)) as ITempDataDictionaryFactory;
ITempDataDictionary tempData = factory.GetTempData(httpContext);
Nachdem Sie ITempDataDictionary haben, können Sie es verwenden, wie Sie TempData innerhalb eines Controllers verwenden würde.
//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);
Nun, wenn ich den Controller nach einer Umleitung ich keine Probleme haben die Referenznummer herausziehen und es in meiner Ansicht verwenden.
//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>}
Sobald Sie dies alles zusammen, geben Sie den Benutzern eine Referenznummer, die sie Ihnen geben kann, um das Problem zu beheben. Sie geben jedoch keine potenziell sensiblen Fehlerinformationen zurück, die missbraucht werden könnten.