获取与NancyFX无法在CORS中工作的请求

时间:2017-09-26 13:15:12

标签: c# angular cors nancy

我在CORS请求和NancyFx方面遇到了一些问题。 我有一些GET请求在工作,但不是每次都有效。

由于我使用Content-Type : application/json我的请求是"而不是简单的请求类型"所以他们有一个预检OPTIONS请求。

预检工作正常,但有时候GET请求返回404(找不到我要求的路线),有时我会得到我的数据。

这是我在Nancyfx的CORS回复:

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)。

以下是我在控制台中获得的内容:

enter image description here

以下是我在“网络”标签中的内容:

enter image description here

我在客户端添加的唯一特定标题是Authorization标题。

1 个答案:

答案 0 :(得分:2)

应该在应用程序启动时调用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