AJAX рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рд╕рд╣реА рд╣реИрдВрдбрд▓рд┐рдВрдЧ ASP.NET MVC рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ

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

рд╕рдорд╕реНрдпрд╛


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣рдорд╛рд░рд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рд╕рд░реНрд╡рд░:

  [HttpPost]
 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ActionResult GetData ()
 {

	 рд╡рд╛рдкрд╕реА Json (рдирдпрд╛)
	 {
		 рдЖрдЗрдЯрдо = рдирдпрд╛ []
		 {
			 "рд▓реА рдЪреЗрди",
			 "рдЕрдмреНрджреБрд▓реНрд▓рд╛ рдЦрд╝рдореАрд░",
			 "рдорд╛рд░реНрдХ рд╢реНрд░реАрдирдмрд░реНрдЧ",
			 "рдХреЗрдЯреА рд╕реБрд▓рд┐рд╡рди",
			 "рдПрд░рд┐рдХреЛ рдЧреИрдВрдЯреЛрдорд╛рд░реЛ",
		 }
	 });
 } 


рдЧреНрд░рд╛рд╣рдХ:

  var $ рд╕реВрдЪреА = $ ("# рд╕реВрдЪреА");
 var $ рд╕реНрдерд┐рддрд┐ = $ ("# рд╕реНрдерд┐рддрд┐");
 $ list.empty ();
 $ status.text ("рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ ...");

 $ .post ("/ рд╣реЛрдо / рдЧреЗрдЯрдбрд╛рдЯрд╛")
	 .always (рдлрд╝рдВрдХреНрд╢рди () {
		 $ рд╕реНрдерд┐рддрд┐ред рдЦрд╛рд▓реА ();
	 })
	 .success (рдлрд╝рдВрдХреНрд╢рди (рдбреЗрдЯрд╛) {
		 рдХреЗ рд▓рд┐рдП (var i = 0; рдореИрдВ <data.Items.length; i ++) {
			 $ list.append ($ ("<li />")ред рдкрд╛рда (data.Items [i]));
		 }
	 }); 


рддрд░реНрдХ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдВрддреНрд░ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд╕рд╛рде, рдлрд┐рд░ рд╕реЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо ASP.NET MVC рдореЗрдВ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдлреЙрд░реНрдо рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рддрдВрддреНрд░ рдФрд░ рдЕрдзрд┐рдХреГрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:

  [HttpPost]
 [рдЕрдзрд┐рдХреГрдд]
 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ActionResult GetData ()
 {
	 рд╡рд╛рдкрд╕реА Json (рдирдпрд╛)
	 {
		 рдЖрдЗрдЯрдо = рдирдпрд╛ []
		 {
			 "рд▓реА рдЪреЗрди",
			 "рдЕрдмреНрджреБрд▓реНрд▓рд╛ рдЦрд╝рдореАрд░",
			 "рдорд╛рд░реНрдХ рд╢реНрд░реАрдирдмрд░реНрдЧ",
			 "рдХреЗрдЯреА рд╕реБрд▓рд┐рд╡рди",
			 "рдПрд░рд┐рдХреЛ рдЧреИрдВрдЯреЛрдорд╛рд░реЛ",
		 }
	 });
 } 


рдлрд┐рд░ рд╕реЗ - рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг) рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдореЗрдВ), рддреЛ рд╕рд░реНрд╡рд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ ... HTTP 302 рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЙрд▓ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдорд┐рд▓рд╛ ред



рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдиреЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЛрдбрд╝ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рдереА рдФрд░ рдЖрдЧреЗ рдЖрд╡реЗрджрди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдХрд╛рд░рдгреЛрдВ


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдХрд╛рд░рдгреЛрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВ - HTTP 302 рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ - 302 рдХрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ? рдпрд╣ рдорд╛рдирдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ HTTP 401 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо FormsAuthentication рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, FormsAuthenticationModule (рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ HTTP рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ HTTP рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХреЛрдб 401 рд╣реИ, рддреЛ рдпрд╣ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЗрд╕реЗ 302 рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:



рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд░рд┐рдЯрд░реНрди рдХреЛрдб - 401)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЕрдиреБрдХреВрд▓ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝реЙрд░реНрдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╡рд╛рд▓рд╛ IIS рдкреГрд╖реНрда рдирд╣реАрдВред рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рд╣рдорд╛рд░реЗ ASP.NET MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рдЕрдиреБрд░реЛрдз рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдСрдерд░рд╛рдЗрдЯрд░ рдлрд┐рд▓реНрдЯрд░ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реИред
  2. рдЪреВрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ HTTP 401 рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ (рдЖрдк рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдкрд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд╕рд╛рде рджреЗрдЦрдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  3. рдареАрдХ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ FormsAuthenticationModule рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ 401 рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред


рдирддреАрдЬрддрди, рдЬрдм рдкрд╛рд╕рд╡рд░реНрдб-рд░рдХреНрд╖рд┐рдд рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝реЙрд░реНрдо ( рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ ) рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп, рдпрд╣ рдЙрддреНрддрд░ рд╕реВрдЪрдирд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ ( рдЬреЛ рдЦрд░рд╛рдм рд╣реИ )ред

рдирд┐рд░реНрдгрдп


рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП -

  1. рд╕рд░реНрд╡рд░ рдиреЗ AJAX рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП 401/403 рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП 302 рджрд┐рдПред
  2. рдХреНрд▓рд╛рдЗрдВрдЯ 401/403 рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ред


рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, FormsAuthenticationModule рдХреЛ 401 рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, HttpResponse рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЧреБрдг рд╣реИ - SuppressFormsAuthenticationRedirect :



рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдФрд░ рдХреЛрдИ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛?

рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рджреЛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд╕реНрдЯрдо ( 401 ) рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рд▓реЙрдЧрд┐рди рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрднреА рднреА рдЙрд╕рдХреЗ ( 403 ) рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рдЗрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рднреЗрдЬрдирд╛ рд╢рд╛рдпрдж рдмреЗрд╡рдХреВрдлреА рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрд╕реЗ рдХреЗрд╡рд▓ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред


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



... рдпрд╛рдиреАред рдпрд╣ рд╣рдореЗрд╢рд╛ 401 рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╣реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ , рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз AJAX рдЕрдиреБрд░реЛрдз рд╣реИ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ:

  рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ ApplicationAuthorizeAttribute: AuthorizeAttribute
 {
	 рд╕рдВрд░рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рд╢реВрдиреНрдп рд╣реИрдВрдбрд▓рд▓реЗрдиреЛрдереЛрд░рд╛рдЗрдЬреНрдбRequest (рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХрд░рдг рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рд┐рд▓реНрдЯрд░рдХрдВрдЯреЗрдХреНрд╕)
	 {
		 var httpContext = filterContext.HttpContext;
		 var рдЕрдиреБрд░реЛрдз = httpContext.Request;
		 var response = httpContext.Response;

		 рдпрджрд┐ (request.IsAjaxRequest ())
			 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред

		 base.HandleUnauthorizedRequest (filterContext);
	 }
 } 


рджреВрд╕рд░рд╛ - рд╢рд░реНрдд рдЬреЛрдбрд╝реЗрдВ: рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ, рддреЛ 403 рджреЗрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ 401:

  рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ ApplicationAuthorizeAttribute: AuthorizeAttribute
 {
	 рд╕рдВрд░рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рд╢реВрдиреНрдп рд╣реИрдВрдбрд▓рд▓реЗрдиреЛрдереЛрд░рд╛рдЗрдЬреНрдбRequest (рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХрд░рдг рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рд┐рд▓реНрдЯрд░рдХрдВрдЯреЗрдХреНрд╕)
	 {
		 var httpContext = filterContext.HttpContext;
		 var рдЕрдиреБрд░реЛрдз = httpContext.Request;
		 var response = httpContext.Response;
		 var рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = httpContext.User;

		 рдпрджрд┐ (request.IsAjaxRequest ())
		 {
			 рдЕрдЧрд░ (user.Identity.IsAuthenticated == рдЧрд▓рдд)
				 response.StatusCode = (int) HttpStatusCode.Unauthorized;
			 рдЕрдиреНрдпрдерд╛
				 response.StatusCode = (int) HttpStatusCode.Forbidden;

			 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред
			 response.End ();
		 }

		 base.HandleUnauthorizedRequest (filterContext);
	 }
 } 


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

рдЦреИрд░, рдЖрдЦрд┐рд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ 401/403 рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдЖрдк jQuery рдореЗрдВ ajaxError рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  $ (рджрд╕реНрддрд╛рд╡реЗрдЬ) .ajaxError (рдлрд╝рдВрдХреНрд╢рди (рдИ, xhr))
	 рдЕрдЧрд░ (xhr.status == 401)
		 window.location = "/ рдЦрд╛рддрд╛ / рд▓реЙрдЧрд┐рди";
	 рдФрд░ рдЕрдЧрд░ (xhr.status == 403)
		 рдЪреЗрддрд╛рд╡рдиреА ("рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ");
 }); 


рдЕрдВрдд рдореЗрдВ -



Minuses рдХреА - рдЖрдкрдХреЛ рдорд╛рдирдХ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдирдП ApplicationAuthorizeAttribute рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдорд╛рдирдХ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб github рдкрд░ рд╣реИ ред

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


All Articles