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リクエストでは同じではありません。
どんな助けもありがたいです
前もって感謝します!
Web.configに次の行を追加して解決しました。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
ありがとう。
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
ヘッダーに追加されると、解決されました。
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();
}
}
この上記のコードはうまくいきました