Nancy: Rute OPTIONS mengabaikan jalur pipa Sebelum/Sesudah

Dibuat pada 28 Jan 2014  ·  7Komentar  ·  Sumber: NancyFx/Nancy

Saya menggunakan Nancy bersama dengan tulang punggung. Ketika saya menyimpan model ke server, backbone mengirimkan permintaan OPSI untuk memeriksa apakah server menerima permintaan PUT (lihat jawaban SO ini ). Nancy menjawab ini secara otomatis, tetapi tidak menjalankan pipa setelah modul saya, yang terlihat seperti ini:

After += ctx => ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");

Karena Access-Control-Allow-Origin tidak disetel, permintaan gagal:

OPTIONS http://localhost:5555/machines No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. vendor.js:3
XMLHttpRequest cannot load http://localhost:5555/machines. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. 

Header permintaan:

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en,de-DE;q=0.8,de;q=0.6,en-US;q=0.4,fr;q=0.2
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:PUT
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:5555
Origin:http://localhost
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36

Header respons:

Allow:GET, POST, PUT
Cache-Control:private
Connection:Close
Content-Length:0
Date:Tue, 28 Jan 2014 08:20:13 GMT
Server:ASP.NET Development Server/11.0.0.0
X-AspNet-Version:4.0.30319

Komentar yang paling membantu

Saya mengalami masalah yang sama dan ApplicationStartup tidak membantu saya

Semua 7 komentar

Karena permintaan OPTIONS ditangani di luar modul, DefaultRouteResolver mengembalikan ResolveResult mana pipa Before dan After adalah null , di sini .

Ini menghasilkan DefaultRequestDispatcher kembali lebih awal dan tidak menggunakan saluran pipa apa pun, di sini .

Solusinya adalah entah bagaimana memasukkan saluran pipa ke DefaultRouteResolver , mungkin dengan menambahkan metode Initialize seperti IDiagnostics , IApplicationStartup , dll. bootstrap di suatu tempat :senyum:

Saya hanya datang sejauh ini:

protected override NancyInternalConfiguration InternalConfiguration
{
    get
    {
        return NancyInternalConfiguration.WithOverrides(x => x.RouteResolver = typeof(CustomRouteResolver));
    }
}

public class CustomRouteResolver : DefaultRouteResolver 
{
  public CustomRouteResolver(INancyModuleCatalog catalog, INancyModuleBuilder moduleBuilder, IRouteCache routeCache, IRouteResolverTrie trie)
        : base(catalog, moduleBuilder, routeCache, trie)
    {

    }
    public void Initialize()
    {
    }
}

Resolve tidak menjalankan panggilan balik apa pun sebelum meneruskan permintaan ke BuildOptionsResult , itulah sebabnya saya tidak tahu apa yang harus dilakukan di Initialize . Tapi aku tidak begitu mengenal Nancy...

Bisakah kamu menolong? Terima kasih banyak!

nanti saya lihat :wink:

Jadi ini dalam NancyModule ? Apakah ada alasan mengapa ini harus berada di dalam modul tertentu? Saya menulis tes yang lulus dengan sempurna:

[Fact]
public void Should_invoke_AfterRequest_pipeline()
{
    var afterPipelineInvoked = false;
    var bootstrapper = new ConfigurableBootstrapper();

    bootstrapper.AfterRequest
            .AddItemToEndOfPipeline(ctx => afterPipelineInvoked = true);

    new Browser(bootstrapper).Options("/");

    Assert.True(afterPipelineInvoked);
}

Coba tambahkan header Access-Control-Allow-Origin di metode ApplicationStartup bootstrap sebagai gantinya :smile:

Anda benar sekali, ini berfungsi ketika saya melakukan ini bootstrap:

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
    pipelines.AfterRequest += (ctx) =>
    {
        ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    }
}

Terima kasih lagi! :jempolan:

Senang Anda mengetahuinya! :penari:

Saya mengalami masalah yang sama dan ApplicationStartup tidak membantu saya

Apakah halaman ini membantu?
0 / 5 - 0 peringkat