2017-09-26 5 views
0

CORSリクエストとNancyFxに問題があります。 私はいくつかのGETリクエストを働いていましたが、毎回ではありませんでした。NancyFXでCORSで作業しないリクエストを取得する

私はContent-Type : application/jsonを使用しているので、私のリクエストは「単純なタイプのリクエスト」ではないので、プリフライトOPTIONSリクエストがあります。

プリフライトが動作しますが、GETリクエストが返信404(私が求めているルートを見つけられない)と時々私のデータを取得することがあります。

protected override void RequestStartup(TinyIoCContainer requestContainer, IPipelines pipelines, NancyContext context) 
{ 
    base.RequestStartup(requestContainer, pipelines, context); 

    pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) => 
    { 
     ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") 
     .WithHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS, PATCH") 
     .WithHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization") 
     .WithHeader("Access-Control-Max-Age", "3600"); 
    }); 
} 

私はこのようになり打ってるの要求:

http://localhost:3579/api/v2/vnos/{idVno:guid}/vnosを(とidVnoは常に設定されている)。ここ

はNancyfxの私のCORS応答です。ここで

は、私は、コンソールで得るものです:

enter image description here

そして、ここでは、私は、ネットワークタブで得るものです:

enter image description here

そして、私は追加しているだけで、特定のヘッダー私のクライアントではAuthorizationヘッダーです。

答えて

1

OPTIONSハンドラは、アプリケーションの起動時に呼び出す必要があります。起動時に要求しないようにする必要があります。要求が2XXでない場合は無視されます。

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines) 
{ 
    pipelines.AfterRequest += (ctx) => 
    { 
     ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") 
        .WithHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS, PATCH") 
        .WithHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization") 
        .WithHeader("Access-Control-Max-Age", "3600"); 
    } 
} 

詳細については、https://github.com/NancyFx/Nancy/issues/1422を参照してください。

+0

スニペットが解決に役立ちましたが、それを '4xx'レスポンスに追加するのを忘れました。感謝の思考 – mJehanno

関連する問題