2017-08-14 19 views
0

私はデフォルトwebapi ApplicationOAuthProvider以下のコードを使用してログインしています。 Web.configでwebapi 2.0クロスオリジンの動作

<add name="Access-Control-Allow-Origin" value="*" /> 

を追加し、クライアントはwww.testapi.com/tokenからログインできます。 すべて正常に動作します。

しかし、私はカスタムwebapi関数を作成します。それでも私はアクセス元制御を有効にするように依頼しています。だから私は、それは、プロンプトエラー複数の値 『http://www.myweb.com:82、*』「アクセス制御 - 許可 - 起源ヘッダが含まれている」

を言って WebapiConfig.cs

EnableCorsAttribute cors = new EnableCorsAttribute("http://www.myweb.com:82", "*", "*"); 
     config.EnableCors(cors); 

この時間にこのコード行を追加することで、そう1つだけが許可されます。 Origin 'http://www.myweb.com:82'はアクセスできません。

私はweb.configの<add name="Access-Control-Allow-Origin" value="*" />を削除して動作します。

私はログインに戻り、<add name="Access-Control-Allow-Origin" value="*" />を追加するよう求めています。しかし、私はこれを追加する場合私のwebapiメソッドは呼び出すことができません。

私は追加しません。クライアントはログインできません。

両方の方法がありますか? は、エラーのある200の応答です。 enter image description here

public void ConfigureAuth(IAppBuilder app) 
    { 
     // Configure the db context and user manager to use a single instance per request 
     app.CreatePerOwinContext(ApplicationDbContext.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 

     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     // Configure the application for OAuth based flow 
     PublicClientId = "self"; 
     OAuthOptions = new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new ApplicationOAuthProvider(PublicClientId), 
      AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
      // In production mode set AllowInsecureHttp = false 
      AllowInsecureHttp = true 
     }; 

     // Enable the application to use bearer tokens to authenticate users 
     app.UseOAuthBearerTokens(OAuthOptions); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);//as instructed 

webapiconfig.cs

public static void Register(HttpConfiguration config) 
    { 


     // Web API configuration and services 
     // Configure Web API to use only bearer token authentication. 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
     WebApiConfig.Register(config); 
     config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE")); 
     //var jsonp = new JsonpMediaTypeFormatter(config.Formatters.JsonFormatter); 
     //config.Formatters.Insert(0, jsonp); 
    } 
} 
+0

に次の行を追加します

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

WebApiConfigに以下の行は、あなたのAPIコントローラー '[EnableCors(起源でこれを追加します。 "*"、ヘッダー: "*"、メソッド: "*"、exposedHeaders: "X-My-Header") 'これはコントローラー・レベルです。コアを有効にするには、特定のアクションメソッドで同じものを追加できます。 –

+0

これはまだ同じエラーが表示されています "1つだけ許可されています。私はweb.configのアクセス元を削除しませんでした。 –

答えて

3
  1. Microsoft.AspNet.WebApi.Cors nugetパッケージ
  2. 01をインストールし更新1 startup.auth.cs
  3. Microsoft.Owin.Cors nugetパッケージをインストールし
  4. Startup.csファイルでWebApiConfig.Register(config);行の上記にconfig.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE"));を追加します。
  5. Startup.Auth.csファイルにapp.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);を追加します。これは、最終的に私はそれが「@manpritシンSahota」

    私はweb.configファイルからのすべてのアクセスポリシーを削除するから助けを借りて仕事を得るために管理IAppBuilder.UseWebApi

+0

まだ同じエラーです。 。まだ同じです。haizz。これは私を狂ったように悩ませています。 –

1

OKを呼び出す前に行う必要があります。 とも私はStartup.Auth.cs

public void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);//working line 

enter image description here

関連する問題