IRO.Mvc.MvcExceptionHandler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ASP.NET рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛



рдпрджрд┐ рдЖрдк рдПрдХ рд╕реА # рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреАрдХреГрдд рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрджреНрдпрдкрд┐, рднрд▓реЗ рд╣реА рдЖрдк рдЙрддреНрддрд░ рдореЗрдВ 500 рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ, рдлрд┐рд░ рднреА рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рдо ASP.NET рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рд▓рдВрдмрд╛ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ - рд░реАрдбрдореА рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЦреБрдж рдпрд╣рд╛рдВ рд╣реИрдВ , рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рд╣реИ ред Nuget.org рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рддрднреА рдЦреБрд╢реА рд╣реЛрдЧреА рдЬрдм рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдХреЛ рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ, рдЪрд▓реЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдЯреАрдУ (рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдирд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдЬрд╛рдБрдЪ рд░рд╣рд╛ рд╣реЛ) рдбреАрдЯреАрдУ рдореЗрдВ рдбреЗрдЯрд╛ рднрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

public IActionResult Get() { try { //Code with exception. } catch (Exception ex) { return new JsonResult( new ErrorDto { IsError = true, Message = ex.Message }); } } 

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЗрд╕рдХреЗ рд▓рд┐рдП HTTP рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

 public IActionResult Get() { try { //Code with exception. } catch (Exception ex) { return BadRequest(); } } 

рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реЛрдиреЗ рдкрд░: рдорд╛рдирдХ рдХреЛрдб рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рд░ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕рдорд╛рди рдХреЛрдб рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ рдХреБрдЫ рднреА рдЗрди рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдЧрдардмрдВрдзрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╣реАрдВ рд╡реЗ рдбреАрдЯреАрдУ рдХреЛ рднреЗрдЬрдирд╛ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдХрд╣реАрдВ рдХреЛрдб рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдЧрд▓рдд рдХрд┐рд╕реА рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ-рдХрд╣реАрдВ рдпрд╣ рдЧрд▓рдд рдЬреЛрдВрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд┐рд▓рд╕рд┐рд▓реЗрд╡рд╛рд░ рд╣реЛрдЧрд╛ рдФрд░ рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред

рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╣реБрдд рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ app.UseExceptionHandler (); рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рднреВрд▓рдиреЗ рдирд╣реАрдВ рджреЗрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдЕрднреА рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдбреАрдЯреАрдУ рдЪреБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рджреВрд╕рд░реЗ, рдРрд╕реЗ рд╣реИрдВрдбрд▓рд░ http рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдВрдЧреЗ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЧрдП рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реБрдЖред рддреАрд╕рд░рд╛, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджреЗрд╢, http рдХреЛрдб рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЪреМрдерд╛, рдЖрдк AspA DeveloperExceptionPage рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдкрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдкрдиреЗ рдбреАрдЯреАрдУ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд┐рдзрд┐ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдЪрдпрдирд┐рдд рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рджрд┐рдЦрд╛рдКрдВ рдХрд┐ IRO.Mvc.MvcExceptionHandler рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдореИрдВ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЖрджрд░реНрд╢ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреИрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  1. рдпрд╣ рдПрдХ рдбреАрдЯреАрдУ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо http рдХреЛрдб рдХреЛ рднреА рдордирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдЕрднреА рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ, рд╣рд░ рдЬрдЧрд╣ рдФрд░ рдПрдХ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╡реЗ рдмрд╕ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИрдВред рдорд╛рдирдХ DTO рдореЗрдВ IsError рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА (рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ), рдЗрд╕рдореЗрдВ ErrorKey string error рдХреЛрдб рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рджреЗрдЦрдХрд░ рд╣реА рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдпрд╣ рд╕рдм рдареЗрд╕ рдореЗрдВ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ, рдЗрд╕ рдбреАрдЯреАрдУ рдХреЛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдХреБрдХреАрдЬрд╝, рд╣реЗрдбрд░, рдкреИрд░рд╛рдореАрдЯрд░ред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП DeveloperExceptionPage рдХрд╛ рд▓рд┐рдВрдХ рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рдж рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред
  3. рдбреЗрд╡рд▓рдкрд░ рдЕрдкрд╡рд╛рдж, http рддреНрд░реБрдЯрд┐ рдХреЛрдб рдФрд░ ErrorKey рдХреЛ рдПрдХ рд╕рд╛рде рдмрд╛рдВрдз рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╡рд╣ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ 403 рдХреЛрдб рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ ErrorKey рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдбреАрдЯреАрдУ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрдЧрд░ рдПрдХ рдЕрдирдзрд┐рдХреГрдд рдЕрд╕рдлрд▓рддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ http рдХреЛрдб рдФрд░ ErrorKey рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдЧреАред

рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдк рд╣реИ:

 { "__IsError": true, "ErrorKey": "ClientException", "InfoUrl": "https://iro.com/errors/ClientException" } 

рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╡рд╣ рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

IRO.Mvc.MvcExceptionHandler


рдЕрдм рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ IRO.Mvc.MvcExceptionHandler рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдХрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред

рд╣рдо рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреА рддрд░рд╣ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ - рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреНрд▓рд╛рд╕ рдореЗрдВред

 app.UseMvcExceptionHandler((s) => { //Settings... }); 

рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Http рдХреЛрдб рдФрд░ ErrorKey рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдореИрдк (рдмрд╛рдЗрдВрдб) рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдиреАрдЪреЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕реЗрдЯрдЕрдк рд╡рд┐рдХрд▓реНрдк рд╣реИред

  s.Mapping((builder) => { builder.RegisterAllAssignable<Exception>( httpCode: 500, errorKeyPrefix: "Ex_" ); }); 

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рдЖрд▓рд╕реА рдХрдЯреНрдЯрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЛрдб ASP.NET рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдХреЛрдб 500 рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп DTO рдореЗрдВ рдмрд╛рдБрдз рджреЗрдЧрд╛, рдФрд░ рдЕрдкрд╡рд╛рдж рдХрд╛ рдирд╛рдо ErrorKey рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рд╕рдордЭрдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ RegisterAllAssignable рд╡рд┐рдзрд┐ рди рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬ рднреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЙрдЪрд┐рдд рдирд┐рд░реНрдгрдп рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдореИрдк рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдЖрдк рдХреНрд▓рд╛рдпрдВрдЯ рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ http рдХреЛрдб рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА SpecialClientException рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджреВрд╕рд░рд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд▓рд╛рдпрдВрдЯрдХреНрд▓рд╛рдЗрдлрд╝ рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП, рдЙрд╕рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб SpecialClientException рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдм рдХреИрд╢реНрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ ErrorKey рдФрд░ http рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  s.Mapping((builder) => { //By exception, custom error key. builder.Register<ArgumentNullException>( httpCode: 555, errorKey: "CustomErrorKey" ); //By http code. builder.Register( httpCode: 403, errorKey: "Forbidden" ); //By exception, default ErrorKey and http code. builder.Register<NullReferenceException>(); //Alternative registration method. builder.Register((ErrorInfo) new ErrorInfo() { ErrorKey = "MyError", ExceptionType = typeof(NotImplementedException), HttpCode = 556 }); }); 

рдореИрдкрд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд┐рдбрд╡рд╛рдЗрд╡реЗрдЯреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рд╛рд░реНрдердХ рд╣реИред рдЖрдк рдЬрд╕рди рдХреНрд░рдорд╛рдВрдХрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХрд╛ рдкрддрд╛, рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рдкреГрд╖реНрда рдХрд╛ рд▓рд┐рдВрдХ, рдЗрд╕рдмрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдореЛрдб, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдирдХ http рдХреЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  s.ErrorDescriptionUrlHandler = new FormattedErrorDescriptionUrlHandler("https://iro.com/errors/{0}"); s.IsDebug = isDebug; s.DefaultHttpCode = 500; s.JsonSerializerSettings.Formatting = Formatting.Indented; s.Host="https://iro.com"; s.CanBindByHttpCode = true; 

рдЕрдВрддрд┐рдо рд╕рдВрдкрддреНрддрд┐ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ http рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдбреАрдЯреАрдУ рдХреЛ рдмрд╛рдВрдзрдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЖрдк рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .Wait () рдХреЗ рдХрд╛рд░рдг рдЖрдВрддрд░рд┐рдХ рдкрдВрдЬреАрдХреГрдд рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЯрд╛рд╕реНрдХрдХреИрдиреЗрд▓рдПрдб рдЕрдкрд╡рд╛рджред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдорд╛рдирдХ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рд╣реИ рдЬреЛ рдРрд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  s.InnerExceptionsResolver = InnerExceptionsResolvers.InspectAggregateException; 

рдпрджрд┐ рдЖрдкрдХреЛ рд╕реАрд░рд┐рдпрд▓-рдЯреНрдпреВрди рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк FilterAfterDTO рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдирдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд▓реМрдЯреЗрдВ рдФрд░ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ errorContext.ErrorDTO рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░реЗрдВред HttpContext рдФрд░ рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред

  s.FilterAfterDTO = async (errorContext) => { //Custom error handling. Return true if MvcExceptionHandler must ignore current error, //because it was handled. return false; }; 

DeveloperExceptionPage рдФрд░ рдбреАрдмрдЧ рдореЛрдб рдХреЗ рдЕрдиреНрдп рдлрд╛рдпрджреЗ


рд╣рдордиреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ, рдЕрдм рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдбрд┐рдмрдЧ рдХрд░реЗрдВред рдбреАрдЯреАрдУ рдареЗрд╕ рдореЗрдВ, рдЬрд╡рд╛рдм рдореЗрдВ рдЬрд╡рд╛рдм рд╕рд░рд▓ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдерд╛, рдЕрдм рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдбреАрдЯреАрдУ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд╕реНрдЯреИрдХреНрд░реЗрд╕ рдФрд░ рдЕрдиреБрд░реЛрдз рдбреЗрдЯрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧреНрдпреВрдПрд▓ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдмрд┐рдирд╛ рддрдирд╛рд╡ рдХреЗ рддреНрд░реБрдЯрд┐ рдбреЗрдЯрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:



рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрдард┐рди рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ DeveloperExceptionPage рдХреЛ рдХреЗрд╡рд▓ рддреГрддреАрдп-рдкрдХреНрд╖ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдПрдХ рдЕрд▓рдЧ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓рд┐рдВрдХ рдХреЛ рдЦреЛрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛, рдПрдХ рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдмрдВрдж рд╣реЛ рдЧрдИред рдпрд╣ рд╕рдм рдЗрд╕ рдмрд┐рдЪреМрд▓рд┐рдП рдХреА html рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╣реА рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЕрдкрдиреЗ рдЯреАрдо рдХреЗ рд╕рд╛рдереА рдХреЛ рдЕрдкрд╡рд╛рдж рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рдкрд╛рдпрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд▓реЗрдЦ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрди рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╣рдмрд░ рд╕рдореБрджрд╛рдп рдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/hi469731/


All Articles