Mam podstawową aplikację asp.net. Implementacja metody configure przekierowuje użytkownika na stronę "Błąd", gdy istnieje wyjątek (w środowisku nie deweloperskim).Obsługa wyjątków w rdzeniu asp.net?
Działa to jednak tylko wtedy, gdy wyjątek występuje wewnątrz kontrolera. Jeśli wystąpi wyjątek poza sterownikiem, na przykład w moim niestandardowym oprogramowaniu pośrednim, to użytkownik nie zostanie przekierowany na stronę błędu.
Jak mogę przekierować użytkownika do strony "Błąd", jeśli w oprogramowaniu pośredniczącym występuje wyjątek.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
app.UseSession();
app.UseMyMiddleware();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Update 1
I uaktualniony kod powyżej z następujących dwóch linii, które zostały brakuje w początkowym poście.
app.UseSession();
app.UseMyMiddleware();
Również znalazłem dlaczego app.UseExceptionHandler
nie był w stanie przekierować do strony błędu.
Gdy istnieje wyjątek w moim kodzie oprogramowania pośredniego, app.UseExceptionHandler("\Home\Error")
jest przekierowywane do \Home\Error
zgodnie z oczekiwaniami; ale ponieważ jest to nowe żądanie, moje oprogramowanie pośrednie było ponownie uruchamiane i ponownie zgłaszane wyjątek.
Tak, aby rozwiązać ten problem zmieniłem middleware wykonać tylko if context.Request.Path != "/Home/Error"
Nie jestem pewien, czy to jest prawidłowy sposób, aby rozwiązać ten problem, ale swoją pracę.
Gdzie w tym przykładzie jest Twoje niestandardowe oprogramowanie pośredniczące? Myślę, że ** "UseExeptionHandler" powinien być w stanie obsłużyć to, ale twoje oprogramowanie pośrednie musi zostać zarejestrowane ** po ** it. – Tseng