рдпрд╣ рдкреЛрд╕реНрдЯ ASP.NET MVC рд╕реЗ ASP.NET рдХреЛрд░ рдореЗрдВ рдПрдХ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдкреИрджрд╛ рд╣реБрдИ рдереАред рд╣рдордиреЗ рдкреВрд░реА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд░рд╣реЗрдВ рдФрд░ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд░реЛрдбрдореИрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХреЗрдВред
рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рд╣рдо ASP.NET рдкрд░ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдИрдХрд╛рдорд░реНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИрдВ, рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд╕рдордп рддрдХ 9 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓ рд░рд╣рд╛ рдерд╛ред рд╣рдордиреЗ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдкреНрд░рд╡рд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ - рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╣рд╛рде рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рдЙрд╕ рд╕рдордп, рд╣рдо рдкрд╣рд▓реА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрджрдо рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
ASP.NET рдХреЛрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
ASP.NET MVC рд╕реЗ ASP.NET Core рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред

ASP.NET рдХреЛрд░ рдХреЗ рд▓рд╛рднрдЗрд╕рд▓рд┐рдП, ASP.NET Core рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдврд╛рдВрдЪрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдкреНрд░рдореБрдЦ рдЕрдкрдбреЗрдЯ рд╕реЗ рдЧреБрдЬрд░ рдЪреБрдХрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдЬ рдпрд╣ рдХрд╛рдлреА рд╕реНрдерд┐рд░, рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЙрдиреНрдирдд рдФрд░ XSRF / CSRF рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░реЛрдзреА рд╣реИред
рдХреНрд░реЙрд╕ -
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реЙрд▓рдорд╛рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдм рд╕реЗ, рдЖрдкрдХрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдпреВрдирд┐рдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рджреЛрдиреЛрдВ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ - ASP.NET Core рдкреВрд░реА рддрд░рд╣ рд╕реЗ NuGet рд╕рдВрдХреБрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдХреБрд▓ рд╕рд╣рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рдЧреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреВрд╕рд░реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрджрдо рд╣реИ, ASP.NET Core ASP.NET 4.6 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 2300% рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 800% рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╕реНрд╡рдпрдВ рдпрд╛
рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред

рдЗрди-рдРрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП
рдорд┐рдбрд▓рд╡реЗрдпрд░ рдирдпрд╛ рд╣рд▓реНрдХрд╛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдореЙрдбреНрдпреВрд▓рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реИред рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝рд╛ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рдпрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдЕрдЧрд▓реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдЪрдЯреАрдЯреАрдкреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдмрдврд╝рддреА рд╣реБрдИ рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
ASP.NET Core MVC рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред NopCommerce рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ, рд░реЗрдЬрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕, рдореЙрдбрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рд╡реИрд▓рд┐рдбреЗрд╢рди рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рдЯреВрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:
- рдЯреИрдЧ рд╕рд╣рд╛рдпрдХред рд░реЗрдЬрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ HTML рддрддреНрд╡реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЛрдб рд╣реИред
- рдШрдЯрдХ рджреЗрдЦреЗрдВред рдпрд╣ рдПрдХ рдирдпрд╛ рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ рдЖрдВрд╢рд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред nopCommerce рд░реЗрдВрдбрд░рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рд╡реНрдпреВ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЖрдВрд╢рд┐рдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред
- рдбрд┐ рдХрд╛ рдирдЬрд░рд┐рдпрд╛ред рдпрджреНрдпрдкрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рджреГрд╢реНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди nopCommerce рдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдмреЗрд╢рдХ, ASP.NET Core рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЕрднреА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдВрдЪ рдХреА рд╣реИред
рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рд╡рд╛рд╕
рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ ASP.NET рдХреЛрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдВрдЧреЗред рдкрд╣рд▓реА рдмрд╛рд░ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХред
рдЪрд░рдг 1. рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддреИрдпрд╛рд░реА
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2017 рдХреЛ 15.3 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реИред рдФрд░ .NET рдХреЛрд░ рдПрд╕рдбреАрдХреЗ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк .NET
.Net рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИ рдХрд┐ рдПрдХ рдордВрдЪ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд┐рддрдирд╛ рд╢реНрд░рдорд╕рд╛рдзреНрдп рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрдХрд░рдг рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реЛрдВрдЧреЗред рдЕрдЧрд▓рд╛, рдЬрд┐рди рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЬреЛ .NET рдорд╛рдирдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред
рдЪрд░рдг 2. рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NuGet рд╕рдВрдХреБрд▓ рдХрд╛ рд╕рдВрдЧрддрддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг .Net рдорд╛рдирдХ
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ NuGet рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ .NET рдХреЛрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛
NuGetPackageExplorer рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдЪрд░рдг 3. .NET рдХреЛрд░ рдирдП csproj рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
.NET рдХреЛрд░ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд┐рдВрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдЬрдм рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.6" /> ... </ItemGroup> ... </Project>
рдХрдиреЗрдХреНрдЯреЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдВрдХ рдЕрдкрдиреЗ рдЖрдк рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред Project.json рдФрд░ CSPROJ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ
рдпрд╣рд╛рдВ рдФрд░
рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА
рд╣реИ ред
рдЪрд░рдг 4. рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛
рдЖрдкрдХреЛ System.Web рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ Microsoft.AspNetCore рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЪрд░рдг 5. рдЖрдкрдХреЛ Startup.cs рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрд╢реНрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрдЬрд╛рдп
ASP.NET Core рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрдВрддреНрд░ рд╣реИред рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ
Startup
рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░
Global.asax рдлрд╝рд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
Startup
рдЖрд╡реЗрджрди рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реБрдЗрдЯ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддрд╛ рд╣реИред
Startup
рдореЗрдВ
Configure
рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
Configure
рдЖрд╡рд╢реНрдпрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
Startup.cs рд╕рдорд╕реНрдпрд╛рдПрдВ- MVC рдФрд░ WebAPI рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
- рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕:
app.UseMvc(routes => { routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}"); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
рдЙрд╕реА рд╕рдордп, рдирд╛рдо рдХреНрд╖реЗрддреНрд░ рд╡рд╛рд▓рд╛ рдлрд╝реЛрд▓реНрдбрд░, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реНрдерд┐рдд рд╣реИ, рдХреЛ рдЖрд╡реЗрджрди рдХреА рдЬрдбрд╝ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм, рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
[Area("Admin")] [Route("admin")]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
[Area("Admin")] [Route("admin")] public class AdminController : Controller { public IActionResult Index() { return View(); } }
рдорд╛рдиреНрдпрддрд╛рдЕрдм рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ IFormCollection рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ asp.net рд╕рд░реНрд╡рд░ рд╕рддреНрдпрд╛рдкрди рдЕрдХреНрд╖рдо рд╣реИ - рдпрджрд┐ IFormCollection рд╢реВрдиреНрдп рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ MVC рдЖрдЧреЗ рдХреА рдорд╛рдиреНрдпрддрд╛ рдХреЛ рджрдмрд╛ рд░рд╣рд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдореЙрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╣рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рд╕реЗ рд╕реАрдзреЗ рдЧреБрдЬрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред рдпрд╣ рдирд┐рдпрдо рдХреЗрд╡рд▓ рддрднреА рдорд╛рдиреНрдп рд╣реИ рдЬрдм рдХреЛрдИ рдореЙрдбрд▓ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдмрд╛рд▓ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪрд░рдг 6. HTTP рд╣реИрдВрдбрд▓рд░ рдФрд░ HTTP рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
HTTP рд╣реИрдВрдбрд▓рд░реНрд╕ рдФрд░ HTTP рдореЙрдбреНрдпреВрд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк
рд╕реЗ ASP.NET Core рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдСрд░реНрдбрд░ рдЙрд╕ рдСрд░реНрдбрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреНрд░рдо
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдХрд╛ рдХреНрд░рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреНрд░рдо рд╕рдорд╛рди рд╣реИред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдЬреЛ рдЕрдкрдбреЗрдЯ рд╣реЛрдирд╛ рдмрд╛рдХреА рд╣реИ:
- Middleware (AuthenticationMiddleware, CultureMiddleware, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреНрд░рд╡рд╛рд╕рди
- рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рд╣реИрдВрдбрд▓рд░
- рдиреНрдпреВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрд┐рд▓реНрдЯ-рдЗрди рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рдирдореЗрдбрд┐рд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирдП ASP.NET рдХреЛрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
public class AuthenticationMiddleware { private readonly RequestDelegate _next; public AuthenticationMiddleware(IAuthenticationSchemeProvider schemes, RequestDelegate next) { Schemes = schemes ?? throw new ArgumentNullException(nameof(schemes)); _next = next ?? throw new ArgumentNullException(nameof(next)); } public IAuthenticationSchemeProvider Schemes { get; set; } public async Task Invoke(HttpContext context) { context.Features.Set<IAuthenticationFeature>(new AuthenticationFeature { OriginalPath = context.Request.Path, OriginalPathBase = context.Request.PathBase }); var handlers = context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>(); foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync()) { try { if (await handlers.GetHandlerAsync(context, scheme.Name) is IAuthenticationRequestHandler handler && await handler.HandleRequestAsync()) return; } catch {
ASP.NET рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдореНрдмреЗрдбреЗрдб рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕
рдЕрдкрдирд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдФрд░ HTTP рдЕрдиреБрд░реЛрдз рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рд╣реИ ред рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рд╛, рдФрд░ рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
public interface INopStartup {
рдпрд╣рд╛рдВ рдЖрдк рдЕрдкрдиреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдЬреЛрдбрд╝ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЪрд░рдг 7. рдПрдХреАрдХреГрдд рдбрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди ASP.NET рдХреЛрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп, рдореЙрдбреНрдпреВрд▓рд░ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдмрдирд╛рдП рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IoC рдХрдВрдЯреЗрдирд░ (рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ASP.NET Core рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ IServiceProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧ
Startup.ConfigureServices()
рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рднреА рдкрдВрдЬреАрдХреГрдд рд╕реЗрд╡рд╛ рдХреЛ рддреАрди рд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдХреНрд╖рдгрд┐рдХ
- рджрд╛рдпрд░реЗ рд╡рд╛рд▓рд╛
- рдПрдХрд╛рдХреА рд╡рд╕реНрддреБ
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddSingleton<Isingleton,MySingleton>();
рдЪрд░рдг 8. рд╡реЗрдмрдПрдкреАрдЖрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдЧрддрддрд╛ рдЧреЛрд▓реЗ (рд╢рд┐рдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдореМрдЬреВрджрд╛ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреНрд░рд╡рд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
Microsoft.AspNetCore.Mvc.WebApiCompatShim NuGet рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
рд╕рдВрдЧрдд рдХрд╛рд░реНрдп рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:
- ApiController рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
- рд╡реЗрдм рдПрдкреАрдЖрдИ рд╕реНрдЯрд╛рдЗрд▓ рдореЙрдбрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ
- рдореЙрдбрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ HttpRequestMessage рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХреЗрдВред
- рд╕рдВрджреЗрд╢ рдлрд╝реЙрд░реНрдореЗрдЯрд░реНрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЯрд╛рдЗрдк HttpResponseMessage рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
services.AddMvc().AddWebApiConventions(); routes.MapWebApiRoute(name: "DefaultApi", template: "api/{controller}/{id?}" );
рдЪрд░рдг 9. рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдкрд╣рд▓реЗ, рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ web.config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЧрдИ рдереАрдВред рдЕрдм рд╣рдо
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХреА-рд╡реИрд▓реНрдпреВ рдкреЗрдпрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ
рдирдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ ASP.NET рдХреЛрд░ рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрдВрддреНрд░ рд╣реИ, рдФрд░ рд╣рдо appsettings.json рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ * рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк NuGet рд╕рдВрдХреБрд▓
System.Configuration.ConfigurationManager
рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпреВрдирд┐рдХреНрд╕ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ IIS рдХреЗ рддрд╣рдд рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк
Azure Key Vault рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ
Azure Key Valut рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдерд╛ред
рдЪрд░рдг 10. рд╕реНрдереИрддрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ wwwroot рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдкрд░реЛрд╕рдиреЗ
рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реЗрдм рдХреЛ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрдбрд╝ рдХреЛ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ wwwroot рд╣реИред рдЖрдк рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 11. рдкреЛрд░реНрдЯрд┐рдВрдЧ EntityFramework рдИрдПрдл рдХреЛрд░ рдХреЗ рд▓рд┐рдП
рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛
рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ 6 рдХреА рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ
рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдЬреЛ
EF Core
рдореЗрдВ
рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣
NET Framework
рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдорд▓реНрдЯреАрдкреНрд▓реЗрдЯ рд░рд┐рдХреЙрд░реНрдбрд░ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдФрд░ рдЖрдИрдЖрдИрдПрд╕ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЖрдЗрдП рдореБрдЦреНрдп рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ:- System.Data.Entity рдирд╛рдо рд╕реНрдерд╛рди Microsoft.EntityFrameworkCore рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
- DbContext рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЖрдкрдХреЛ DbContextOptions рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- HasDatabaseGeneratedOption (DatabaseGeneratedOption.None) ValueGeneratedNever рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╡рд┐рдзрд┐)
- OnCelete (DeleteBehavior.Restrict) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд WillCascadeOnDelete (рдЭреВрдард╛) рддрд░реАрдХрд╛
- OnModelCreating (DBModelBuilder рдореЙрдбрд▓рдмрд╛рд▓реА) рд╡рд┐рдзрд┐ OnModelCreating (ModelBuilder рдореЙрдбрд▓рдмрд╛рд▓реА) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
- HasOptional рд╡рд┐рдзрд┐ рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
- рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдЖрдкрдХреЛ OnModelCreating рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ EntityTypeConfiguration рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
- ComplexType рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
- DbSet рдХреЗ рд╕рд╛рде IDbSet рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
- ComplexType - рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди EF Core 2 рдореЗрдВ Owned Entity рдкреНрд░рдХрд╛рд░ ( https://docs.microsoft.com/en-us/ef/core/modeling/ рдкреНрд░рд╕рд┐рджреНрдз-entities) рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ EF Core рдореЗрдВ QueryType рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛ рддрд╛рд▓рд┐рдХрд╛рдПрдБ 2.1 ( https://docs.microsoft.com/en-us/ef/core/modeling/query-types )
- EF Core рдореЗрдВ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпрд╛рдБ EF6 рдХреЗ рд╡рд┐рдкрд░реАрдд [Entity] Id рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╛рдпрд╛ рдЧреБрдг рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИрдВ, рдЬреЛ [Entity] _Id рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВред
- DbContext рдХреЗ рд▓рд┐рдП DI рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд┐рдЧрд░рд╕рд░реНрд╡рд┐рд╕реЗрд╕ рдореЗрдВ рдЕрдкрдиреЗ DbContex рдХреЛ
ConfigureServices
рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
SQL рддреБрд▓рдирд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐
EF Core
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди
Entity Framework
рдХреЗ рд╕рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИред
рдЪрд░рдг 12. рд╕рднреА HttpContext рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛, рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдмрджрд▓рдирд╛
рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рдЖрдкрдХреЛ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдм рдХреБрдЫ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЙрди рдореБрдЦреНрдп рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬрд┐рдирдХрд╛ рдЖрдк рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- HttpPostedFileBase -> IFormFile
- HttpContext рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдкрд╣реБрдВрдЪ рдЕрдм IHttpContextAccessor рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ
- HtmlHelper -> IHtmlHelper
- ActionResult -> IActionResult
- HttpUtility -> рд╡реЗрдмрдпреБрдЯрд┐рд▓рд┐рдЯреА
- HttpSessionStateBase рдХреЗ рдмрдЬрд╛рдп - ISession, HttpContext.Session рд╕реЗ рд╕реБрд▓рдн рд╣реИред Microsoft.AspNetCore.Http рд╕реЗ
- Request.Cookies рдиреЗ IRequestCookieCollection: IEnumerable <KeyValuePair <string, string >>, рдЗрд╕рд▓рд┐рдП HttpCookie рдХреЗ рдмрдЬрд╛рдп, KeyValuePair <string, string> Microsoft.AspNetCore.Http рдХреЗ рдмрдЬрд╛рдп
рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЬрдЧрд╣:
- SelectList -> Microsoft.AspNetCore.Mvc.Rendering
- UrlHelper -> WebUtitlity
- MimeMapping -> FileExtensionContentTypeProvider
- MvcHtmlString -> IHtmlString рдФрд░ HtmlString
- ModelState, ModelStateDictionary, ModelError -> Microsoft.AspNetCore.Mvc.ModelBinding
- FormCollection -> IFormCollection
- Request.Url.Scheme -> this.Url.ActionContext.HttpContext.Request.Sheme
рдЕрдиреНрдп:
- MvcHtmlString.IsNullOrEmpty (IHtmlString) -> String.IsNullOrEmpty (variable.ToHtmlString) ()
- [рд╡реИрдзрд╡реНрдп (рдЭреВрдареА)] - рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
- HttpUnauthorizedResult -> рдЕрдирдзрд┐рдХреГрдд
- [AllowHtml] - рдирд┐рд░реНрджреЗрд╢ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
- TagBuilder.SetInnerText рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ - рдЕрдм рдпрд╣ рдЗрдирд░рдПрдЪрдЯреАрдПрдордПрд▓ рд╣реИред рдПрдкреЗрдВрдбрд╣рдЯ рдПрдордПрд▓
- JsonRequestBehavior.AllowGet рдЬрдм Json рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
- HttpUtility.JavaScriptStringEncodeред -> JavaScriptEncoder.Default.Encode
- Request.RawUrlред рдпрд╣ рдЕрд▓рдЧ рд╕реЗ Request.Path + Request.QueryString рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- AllowHtmlAttribute - рдЕрдзрд┐рдХ рд╡рд░реНрдЧ рдирд╣реАрдВ
- XmlDownloadResult - рдЕрдм рдЖрдк рдХреЗрд╡рд▓ рд░рд┐рдЯрд░реНрди рдлрд╛рдЗрд▓ (Encoding.UTF8.GetBytes (xml), "рдПрдкреНрд▓реАрдХреЗрд╢рди / xml", "filename.xml") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
- [рд╡реИрдзрд╡реНрдп (рдЭреВрдареА)] - рдХреЛрдИ рдЕрдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рдЪрд░рдг 13. рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкрд░рдд рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, ASP.NET Core рдХреЗ рдкрд╛рд╕ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдЕрдкрдирд╛ рддрдВрддреНрд░ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП - рд╣рдо рдЕрдм
MachineKey рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЪрд╛рдмрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
- рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо - рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо-рдЖрдзрд╛рд░рд┐рдд рдХреАрд╕реНрдЯреЛрд░
- Azure Storage - Azure Blob Storage рдореЗрдВ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреБрдВрдЬреА
- рд░реЗрдбрд┐рд╕ - рд░реЗрдбрд┐рд╕ рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреБрдВрдЬреА
- рд░рдЬрд┐рд╕реНрдЯреНрд░реА - рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ
- EF Core - рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрджрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрдВрддреНрд░ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд╕реНрдЯрдо
IXmlRepository рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣рдг рддрдВрддреНрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 14. рдЕрджреНрдпрддрди рдЬреЗрдПрд╕ / рд╕реАрдПрд╕рдПрд╕
рд╕реНрдереИрддрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ: рдЕрдм рдЙрди рд╕рднреА рдХреЛ
wwwroot рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛрдВред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдирд▓рд╛рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреГрд╖реНрда рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдмрд╕ рдЕрдкрдиреЗ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдПрд╕реНрдк-рд▓реЛрдХреЗрд╢рди = "рдкрд╛рдж" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣реА рдирд┐рдпрдо js рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
System.Web.Optimization рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ
BundlerMinifier рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП
рд▓рд┐рдВрдХ ред
рдЪрд░рдг 15. рдорд╛рдЗрдЧреНрд░реЗрдЯрд┐рдВрдЧ рджреГрд╢реНрдп
рдмрд╛рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, ASP.NET Core рдПрдХ рдирдпрд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ -
ViewCompords , рдЬрд┐рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕рд▓реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
ViewComponent рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
рдЕрдм HtmlHelper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - ASP.NET Core рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдЯреИрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ (
рдЯреИрдЧ рд╣реЗрд▓реНрдкрд░реНрд╕ ) рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рд░реЗрдЬрд░ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрддрдГ рдорд╛рдирдХ HTML рддрддреНрд╡реЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреИрдЧ-рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдордиреЗ
EngineContext
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рддреЛ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╕ рдкрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБ:
- рдкрд░рд┐рд╡рд░реНрддрд┐рдд
Views/web.config Views/_ViewImports.cshtml
- рдирд╛рдорд╕реНрдерд╛рди рдЖрдпрд╛рдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ Views/web.config Views/_ViewImports.cshtml
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЕрдиреНрдп Razor
рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЕрдиреБрднрд╛рдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВред namespaces.add
рдмрджрд▓реЗрдВ- рдХрд┐рд╕реА рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
Scripts.Render
рдФрд░ Styles.Render
ред Styles.Render
рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдВрдХ рдХреЗ BundlerMinifier
libman
рдпрд╛ BundlerMinifier
рдмрджрд▓реЗрдВ
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рд╣рдордиреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрдбрд╝реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдкрд╣рд▓рд╛ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реБрдЖ, рд╣рдордиреЗ рдПрдХ рдирдП рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рддреБрд░рдВрдд рдЦрддреНрдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдП: рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдереЗ рдЬреЛ рдЙрд╕ рд╕рдордп рддрдХ рдЕрднреА рддрдХ .NET рдХреЛрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдП рдереЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, EntityFramework рд╕реЗ рд╕рдВрдмрдВрдзрд┐рддред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдорд┐рд╢реНрд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд░реА рдХрд░рдирд╛ рдерд╛ - .NET рдХреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рдеред
рд╣рдо .NET рдХреЛрд░ 2.1 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдЙрд╕ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдорд╛рдзрд╛рди - рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рдерд╛ рдЙрд╕реЗ рдХреБрдЫ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдИрдПрдл рдХреЛрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдП рдврд╛рдВрдЪреЗ рдореЗрдВ рдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╕ рдореЗрдВ рдХрдИ рдорд╣реАрдиреЛрдВ рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред
рдЖрдк
GitHub рдкрд░ рд╣рдорд╛рд░реЗ
рднрдВрдбрд╛рд░ рд╕реЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред