2016-08-26 4 views
1

Microsoft.AspNet.WebApi V5.2.3、Microsoft.Owin.Host.HttpListener 3.0.1を使用しています。以下の設定で作業を開始:WebAPI OWIN SelfHosting CORSサポート

public void Configuration(IAppBuilder appBuilder) 
{ 
    HttpConfiguration config = new HttpConfiguration(); 
    config.MapHttpAttributeRoutes(); 

    appBuilder.UseWebApi(config); 
} 

そしてAPIコントローラクラスが使用して宣言されています。

[EnableCors("*", "*", "*")] 
public class CWebAPIController : ApiController 
{ 
    [Route("API/System/Login"), HttpGet] 
    public IHttpActionResult Login(string UserID, string Password) 
    { 
     .... bla bla bla ..... 
    } 
} 

私は同じコンピュータ上でHttpClentを使用して、上記のAPIを呼び出すことができていますが、私は起動しようとした場合(同じサブネット内の)別のコンピュータからのAPIは、私は400 BadRequestの応答を得た。

私はこれがCORSの問題だと思いますが、どうすればこの問題を解決できるか分かります。 Googleで検索すると多くの結果が得られ、WebApiのバージョン/実装は非常に多く、1日中試してみるとどちらが正しいかわかりません。事前に

おかげで

答えて

0

あなたはこのようなあなたのStartupクラスでCORSをMicrosoft.Owin.Corsパッケージに持参し、多分Microsoft.AspNet.Corsパッケージをプロジェクトにして初期化する必要があります。

var corsPolicy = new CorsPolicy 
      { 
       AllowAnyHeader = true, 
       AllowAnyMethod = true, 
       AllowAnyOrigin = true, 
       SupportsCredentials = true 
      }; 
      corsPolicy.ExposedHeaders.Add("x-markit-currentpage"); 
      corsPolicy.ExposedHeaders.Add("x-markit-totalpages"); 
      corsPolicy.ExposedHeaders.Add("x-markit-totalresults"); 
      app.UseCors(new CorsOptions 
      { 
       PolicyProvider = new CorsPolicyProvider { PolicyResolver = context => Task.FromResult(corsPolicy) } 
      }); 
0

EnableCors属性はAPIコントローラで機能するはずです。または、次のいずれかを実行できます。

あなたはどのコンピュータからのアクセスを許可したい場合は、その後、

var cors = new EnableCorsAttribute("www.example.com", "*", "*"); 
config.EnableCors(cors); 

あなた'LLを使用できるように、ドメイン/コンピュータ上で制御したい場合、あなたは

appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
エルス

を使用することができますMicrosoft.Owin.Corsパッケージをインストールする必要があります。

0

自己ホストでは、Adminモードで以下のコマンドを実行する必要があります。

netsh http add urlacl url=http://+:<port>/ user=<user id> 
1

私はこのようなCORSを追加しました:

public void Configuration(IAppBuilder app) 
    { 
     var config = ConfigureApi(); 
     app.UseWebApi(config); 
    } 
    private HttpConfiguration ConfigureApi() 
    { 

     var config = new HttpConfiguration(); 
     config.Routes.MapHttpRoute(
      "DefaultApi", 
      "{controller}/{action}/{id}", 
      new { id = RouteParameter.Optional }); 
     config.MessageHandlers.Add(new CorsMessageHandler()); 
     return config; 
    } 

CorsMessageHandlerはここにある:https://github.com/Microsoft/FetchClimate/blob/master/src/Service/Frontend/CORS/CorsMessageHandler.cs

は、それが動作します願っています。

関連する問題