рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рддреЗ рд╕рдордп 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 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЕрдиреБрд░реЛрдз рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдСрдерд░рд╛рдЗрдЯрд░ рдлрд┐рд▓реНрдЯрд░ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реИред
- рдЪреВрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ HTTP 401 рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ (рдЖрдк рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдкрд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд╕рд╛рде рджреЗрдЦрдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
- рдареАрдХ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ FormsAuthenticationModule рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ 401 рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдЬрдм рдкрд╛рд╕рд╡рд░реНрдб-рд░рдХреНрд╖рд┐рдд рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝реЙрд░реНрдо (
рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ ) рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп, рдпрд╣ рдЙрддреНрддрд░ рд╕реВрдЪрдирд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ (
рдЬреЛ рдЦрд░рд╛рдм рд╣реИ )ред
рдирд┐рд░реНрдгрдп
рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП -
- рд╕рд░реНрд╡рд░ рдиреЗ AJAX рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП 401/403 рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП 302 рджрд┐рдПред
- рдХреНрд▓рд╛рдЗрдВрдЯ 401/403 рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ред
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, FormsAuthenticationModule рдХреЛ 401 рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, HttpResponse рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЧреБрдг рд╣реИ -
SuppressFormsAuthenticationRedirect :
рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдФрд░ рдХреЛрдИ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛?
рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рджреЛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд╕реНрдЯрдо ( 401 ) рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рд▓реЙрдЧрд┐рди рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрднреА рднреА рдЙрд╕рдХреЗ ( 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)
рдЪреЗрддрд╛рд╡рдиреА ("рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ");
});
рдЕрдВрдд рдореЗрдВ -- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдХрд┐рд╕реА рднреА AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж, рдЙрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреАред
Minuses рдХреА - рдЖрдкрдХреЛ рдорд╛рдирдХ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдирдП ApplicationAuthorizeAttribute рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдорд╛рдирдХ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
github рдкрд░ рд╣реИ ред