Aspnetcore: HTTP 500 рдпрджрд┐ рдореВрд▓ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЗ рдмрд┐рдирд╛ CORS- рд╕рдХреНрд╖рдо рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/aspnetcore

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ

рдпрджрд┐ рдХреЛрдИ HTTP рдЕрдиреБрд░реЛрдз CORS-рд╕рдХреНрд╖рдо рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ origin HTTP рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз HTTP 500 рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЙрдЧ рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╣реИ:

[2019-04-13 14:40:04Z] fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Endpoint MartinCostello.Api.Controllers.TimeController.Get (API) contains CORS metadata, but a middleware was not found that supports CORS.
Configure your application startup by adding app.UseCors() inside the call to Configure(..) in the application startup code.
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.ThrowMissingCorsMiddlewareException(Endpoint endpoint)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.HttpOverrides.HttpMethodOverrideMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

рд╣рд╛рд▓рд╛рдВрдХрд┐, app.Cors() _has_ рдХреЛ app.UseEndpoints(...) рд╕реЗ рдкрд╣рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ #9181 рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдореЗрдВ origin рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рддреЛ CORS рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

https://github.com/aspnet/AspNetCore/blob/b93bc433db66175d2b07b128ec9990f7a4dd7e1b/src/Middleware/CORS/src/Infrastructure/CorsMiddleware.cs#L122 -L125

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

https://github.com/aspnet/AspNetCore/blob/84da613d2c03b6f1c0fa3c01828923ec3415d525/src/Http/Routing/src/EndpointMiddleware.cs#L51 -L55

рдПрдВрдбрдкреЙрдЗрдВрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреА рдЬрд╛ рд░рд╣реА рдХреБрдВрдЬреА рдХреЗрд╡рд▓ рддрднреА рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ рдЬрдм рдЕрдиреБрд░реЛрдз рдореЗрдВ origin рд╣реЗрдбрд░ рдореМрдЬреВрдж рд╣реЛ, рдЬреЛ рдпрд╣рд╛рдВ рд╣реИ:

https://github.com/aspnet/AspNetCore/blob/b93bc433db66175d2b07b128ec9990f7a4dd7e1b/src/Middleware/CORS/src/Infrastructure/CorsMiddleware.cs#L140 -L141

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░ рдпрд╛ рддреЛ рд╣реИрдВ:

  1. CORS рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣рдореЗрд╢рд╛ "рдореИрдВрдиреЗ рдЪрд▓рд╛рдпрд╛ рд╣реИ" рдорд╛рди рдХреЛ HttpContext.Items рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдпрд╛:
  2. рдПрдВрдбрдкреЙрдЗрдВрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ _also_ origin рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ CORS рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ CORS рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдЧреИрд░-рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ HTTP рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

рдкреНрд░рдЬрдирди рдХрд░рдирд╛

  1. CORS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ASP.NET Core MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
  2. рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдореЗрдВ [EnableCors(...)] рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВред
  3. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
  4. рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдорд╛рдирдХ HTTP рдЕрдиреБрд░реЛрдз (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ origin HTTP рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн

.NET Core SDK (reflecting any global.json):
 Version:   3.0.100-preview4-011204
 Commit:    621575bab1

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.17763
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview4-011204\

Host (useful for support):
  Version: 3.0.0-preview4-27612-09
  Commit:  64e9c3e1cd

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 4 рдХреЗ рд▓рд┐рдП, рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

1) рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реЛрдирд╛ рдЬреЛ HttpContext.Items рдмрд╛рдж UseCors() HttpContext.Items рдореЗрдВ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ

```рд╕реА#
рдРрдкред рдпреВрдЬрдХреЙрд░реНрд╕ ();

app.Use ((рд╕рдВрджрд░реНрдн, рдЕрдЧрд▓рд╛) =>
{
рд╕рдВрджрд░реНрднред рдЖрдЗрдЯрдо ["__CorsMiddlewareInvoked"] = рд╕рдЪ;
рдЕрдЧрд▓рд╛ ();
});


2) Disable the check in `EndpointRouting`:
```C#
services.AddRouting(r => r.SuppressCheckForUnhandledSecurityMetadata = true);

рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдПрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧрд▓рдд-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдРрдк рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдкрд╛рдИ рдЧрдИ: https://github.com/martincostello/api/pull/109/commits/a40a99f2dbb82d17ce6cc7cde5e13bc400d78137

cc @pranavkm

рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 4 рдХреЗ рд▓рд┐рдП, рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

1) рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реЛрдирд╛ рдЬреЛ HttpContext.Items рдмрд╛рдж UseCors() HttpContext.Items рдореЗрдВ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ

```рд╕реА#
рдРрдкред рдпреВрдЬрдХреЙрд░реНрд╕ ();

app.Use ((рд╕рдВрджрд░реНрдн, рдЕрдЧрд▓рд╛) =>
{
рд╕рдВрджрд░реНрднред рдЖрдЗрдЯрдо ["__CorsMiddlewareInvoked"] = рд╕рдЪ;
рдЕрдЧрд▓рд╛ ();
});


2) Disable the check in `EndpointRouting`:
```C#
services.AddRouting(r => r.SuppressCheckForUnhandledSecurityMetadata = true);

рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдПрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧрд▓рдд-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

UweKeim picture UweKeim  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

snebjorn picture snebjorn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Pixel-Lord picture Pixel-Lord  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

groogiam picture groogiam  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fayezmm picture fayezmm  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ