web-dev-qa-db-ja.com

Originからのxmlhttprequestへのアクセスは、Angular 6のcorsポリシーによってブロックされています

私はサーバー側のプロジェクトにAsp.Net Core Boilerplate frameworkを使用しています。 Angular 6クライアント側プロジェクトに使用します。エラーなしで機能するサーバー側プロジェクト。 (Swagger APIの表示-およびAPIも機能しています)

Angularプロジェクトからのコンパイルエラーはありません。angular Google Chromeを使用したプロジェクトを実行すると、( http:// localhost:4200 / =)次のエラーメッセージが表示されます。

enter image description here

ブラウザコンソールはこれを表示します:-

Origin ' http:// localhost:42 'からの ' http://server.projectName.lk//AbpUserConfiguration/GetAll 'でのXMLHttpRequestへのアクセスがCORSによってブロックされましたポリシー:プリフライト要求への応答がアクセス制御チェックに合格しません:要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。

'' http://server.projectName.lk//AbpUserConfiguration/GetAll ''リンクをクリックすると、別のタブで開き、以下のエラーが表示されます。

enter image description here

これを解決するためにあなたのアイデアを高く評価してください。

注:以前の質問では解決策はありませんでした

これは、この問題について受け取るデバッグエラーログです

> The thread 0x54b0 has exited with code 0 (0x0).
> Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request
> starting HTTP/1.1 OPTIONS
> http://localhost:21021/AbpUserConfiguration/GetAll  0
> Microsoft.AspNetCore.Cors.Infrastructure.CorsService:Information: CORS
> policy execution failed.
> Microsoft.AspNetCore.Cors.Infrastructure.CorsService:Information:
> Request Origin http://localhost:4200 does not have permission to
> access the resource.
> Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request
> finished in 311.689ms 204 
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information:
> Route matched with {action = "Index", controller = "Home", area = ""}.
> Executing action San.BA.Web.Host.Controllers.HomeController.Index
> (San.BA.Web.Host) The program '[21292] dotnet.exe' has exited with
> code -1 (0xffffffff).

startup.csファイル

3
Mohan Perera

クロスオリジンリソースシェアリング(CORS)は、サーバーが同じオリジンポリシーを緩和できるようにするW3C標準です。 CORSを使用すると、サーバーは、いくつかのクロスオリジン要求を明示的に許可し、他の要求を拒否できます。 CORSは、JSONPなどの以前の手法よりも安全で柔軟性があります。このトピックでは、ASP.NET CoreアプリでCORSを有効にする方法を示します。

これは、CORSポリシーがサーバー側で失敗したために発生しています。ホストプロジェクトのappsettings.jsonファイルにクライアントURLを追加する必要があるため。

"App": { ...... "CorsOrigins": "http://localhost:4200" ...... }

詳細については、次のURLを確認してください。
https://docs.Microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

2
Charanjit Singh

私はそれが古い質問であることを知っていますが、これがこの問題に直面するだれでも助けになると思いました。最近、ASP.NET WebAPIベースのアプリケーションをAWSに移動したときに同じエラーが発生しました。ロードバランサー(ALB)のタイムアウトが1分であることが判明しました。つまり、いずれかのAPIが1分以上かかる場合、ALBはリクエストをキャンセルし、不思議なことにChromeはCORSに関連するエラーを提供します。IIS HTTPERRログでは、そのようなリクエストはRequest_Cancelledとしてマークされていました。APIの1つが1分以上かかっていたため、ALBのタイムアウト設定を変更する必要があり、物事はスムーズに機能し始めました!ChromeがCORSと呼ばれている理由は謎です!

web.configファイルに移動して、以下のコードを貼り付けます

system.webServer

<httpProtocol>  
    <customHeaders>  
     <add name="Access-Control-Allow-Origin" value="*" />  
     <add name="Access-Control-Allow-Headers" value="Content-Type" />  
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />  
    </customHeaders>  
  </httpProtocol>