web-dev-qa-db-ja.com

プリフライト要求への応答がアクセス制御チェックに合格しません(Angular2)

Asp.netのREST Web APIの呼び出しでエラーが発生します。

XMLHttpRequestが読み込めません http:// localhost:54859/api/PostData 。プリフライト要求への応答がアクセス制御チェックに合格しません:要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' http:// localhost:30 'はアクセスを許可されません

Angular2をフロントエンドとして使用しています。バックエンドでは、WEB APIでCORSを有効にする次のコードを追加しました。

 var corsAttr = new EnableCorsAttribute("*", "*", "*");
 config.EnableCors(corsAttr);

すべてがHttp getリクエストでは正常に機能しますが、Http Postリクエストでは同じではありません。

どんな助けもありがたいです

前もって感謝します!

11
Jayakrishnan

Web.configに次の行を追加して解決しました。

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
   </modules>
</system.webServer>

ありがとう。

12

Global.asax.csのApplication_BeginRequest中にプリフライトリクエストにAccess-Control-Allow-Originヘッダーを追加するとうまくいきました。

Global.asax/Global.asax.cs

protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Preflight request comes with HttpMethod OPTIONS
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")            
        {
            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");               
            // The following line solves the error message
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            // If any http headers are shown in preflight error in browser console add them below
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Pragma, Cache-Control, Authorization ");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }

この問題を解決した後、アプリケーションはブラウザコンソールにエラーをスローし、プリフライトレスポンスで特定のヘッダーが言及されていませんでした。

ヘッダーがプリフライト応答のAccess-Control-Allow-Headersヘッダーに追加されると、解決されました。

7
Nikhil Nambiar
protected void Application_BeginRequest(Object sender, EventArgs e)
{
    // Preflight request comes with HttpMethod OPTIONS
        // The following line solves the error message
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")            
    {
        HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");               
        // If any http headers are shown in preflight error in browser console add them below
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Pragma, Cache-Control, Authorization ");
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    }
}

この上記のコードはうまくいきました

0
Atik Fahm