Mam globalny filtr wyjątek nazwany LogErrorAttribute
:Ani Globalne Filtr Wyjątek lub Application_Error są Catching nieobsługiwany wyjątków
public class LogErrorAttribute : IExceptionFilter
{
private ILogUtils logUtils;
public void OnException(ExceptionContext filterContext)
{
if (this.logUtils == null)
{
this.logUtils = StructureMapConfig.Container.GetInstance<ILogUtils>();
}
this.logUtils.LogError(HttpContext.Current.User.Identity.GetUserId(), "Unknown error.", filterContext.Exception);
}
}
Jest zarejestrowany wraz ze standardowym HandleErrorAttribute
Filtr:
filters.Add(new LogErrorAttribute());
filters.Add(new HandleErrorAttribute());
jestem rejestrowanie filtrów takich jak to:
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Mam też Application_Error
fallback:
protected void Application_Error()
{
var exception = Server.GetLastError();
Server.ClearError();
var httpException = exception as HttpException;
//Logging goes here
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Index";
if (httpException != null)
{
if (httpException.GetHttpCode() == 404)
{
routeData.Values["action"] = "NotFound";
}
Response.StatusCode = httpException.GetHttpCode();
}
else
{
Response.StatusCode = 500;
}
// Avoid IIS7 getting involved
Response.TrySkipIisCustomErrors = true;
// Execute the error controller
if (exception != null)
{
this.errorLogger.Log(LogLevel.Error, "An unknown exception has occurred.", exception);
}
else if (httpException != null)
{
this.errorLogger.Log(LogLevel.Error, "An unknown HTTP exception has occurred.", httpException);
}
else
{
this.errorLogger.Log(LogLevel.Error, "An unknown error has occurred.");
}
}
Teraz mam kontroler interfejsu API, które chwyta niektóre dane z bazy danych, a następnie używa AutoMapper
mapowanie modeli aby zobaczyć modele:
var viewModels = AutoMapper.Mapper.Map(users, new List<UserViewModel>());
Wewnątrz że AutoMapper
konfiguracja zwyczaj rezolwer wykonuje dla jednej z właściwości:
var appModuleAssignments = this.appModuleAssignmentManager.Get(userId);
var appModules = appModuleAssignments.Select(x => this.appModuleManager.Get(x.AppModuleId));
return AutoMapper.Mapper.Map(appModules, new List<AppModuleViewModel>());
w tej chwili jestem zmuszając appModuleManager.Get
oświadczenie rzucić regularny wyjątek:
throw new Exception("Testing global filter.");
ten następnie zgłasza wyjątek w AutoMapper
, z których oba są nieobsługiwany jednak ani filtr globalny lub tym Application_Error
odbierają ten wyjątek.
Co zrobiłem źle tutaj?
parę rzeczy zrobiłem od opublikowania:
- Dodany atrybut do
Web.config
customErrors
jeon
obracać. - Usunięto filtr globalny
HandleErrorAttribute
, ponieważ zdałem sobie sprawę, że ustawił błąd w obsłudze, nawet jeśli był uruchomiony. Nie spodziewałbym się, że tak się stanie, ponieważ ten błąd występuje poza kontrolerem, ale prawdopodobnie przydałoby mi się to później.
Nienawidzę być "tym facetem", ale czy próbowałeś wyczyścić (usuwając) foldery bin i obj, a następnie wyczyścić pamięć podręczną przeglądarki? Wygląda na to, że robisz wszystko poprawnie (od pierwszego spojrzenia). – Pseudonym
@Pseudonim Całkowicie rozumiem, ale tak, byłem na tej drodze. –
Okay Będę musiał przejrzeć twoje pytanie jeszcze raz – Pseudonym