2014-10-03 21 views
7

Nancy ve CORS ile çalışmak için her türlü isteği almaya çalışıyorum. Şu anda talep sonunda bir boru hattını ekleyin:Nancy ile Çalışmak İçin CORS Edinme

  pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) => ctx.Response 
      .WithHeader("Access-Control-Allow-Origin", "http://localhost:57515") 
      .WithHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS") 
      .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type") 
      .WithHeader("Allow", "POST, GET, DELETE, PUT, OPTIONS")) 

seçenekleri istek geri ince infaz olduğunu beni inandıramaz 200 durum koduyla birlikte gelir, ancak SEÇENEKLERİ dışındaki isteği her tür için 405 Yöntemi İzin Verilmez. Bunun işe yaraması için istemci tarafında veya sunucu tarafında yapmam gereken başka bir şey var mı?

Kullanmakta olduğum istemci tarafı kitaplığı omurgadır.

Şimdiden teşekkürler. Sanmıyorum http://www.iis.net/downloads/microsoft/url-rewrite

cevap

14

:

<rewrite> 
    <outboundRules> 
    <rule name="Set Access Control Allow Origin Header" preCondition="Origin header"> 
     <match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern="(.*)" /> 
     <action type="Rewrite" value="{HTTP_ORIGIN}" /> 
    </rule> 
    <rule name="Set Access Control Allow Headers Header" preCondition="Origin header"> 
     <match serverVariable="RESPONSE_Access-Control-Allow-Headers" pattern="(.*)" /> 
     <action type="Rewrite" value="Content-Type" /> 
    </rule> 
    <rule name="Set Access Control Allow Methods Header" preCondition="Origin header"> 
     <match serverVariable="RESPONSE_Access-Control-Allow-Method" pattern="(.*)" /> 
     <action type="Rewrite" value="POST,GET,OPTIONS" /> 
    </rule> 
    <rule name="Set Access Control Allow Credentials Header" preCondition="Origin header"> 
     <match serverVariable="RESPONSE_Access-Control-Allow-Credentials" pattern="(.*)" /> 
     <action type="Rewrite" value="true" /> 
    </rule> 
    <preConditions> 
     <preCondition name="Origin header" logicalGrouping="MatchAny"> 
     <add input="{HTTP_ORIGIN}" pattern="(http://localhost$)" /> 
     <add input="{HTTP_ORIGIN}" pattern="(http://.*\.YOURDOMAIN\.com$)" /> 
     </preCondition> 
    </preConditions> 
    </outboundRules> 
</rewrite> 

IIS yeniden yazma modülü yüklemek unutmayın:

+1

Bu cevap olmalı.Bu bana çok yardımcı oldu. – tronious

1

Ben IIS Rewriter CORS başlıklarını ele güzel bu bunu yapar örnek yeniden yazma WebConfig bölümdür kuralları bulmak izin verilen bir CORS yöntemi olarak OPTIONS belirtmeniz gerekir. Bu seti hiç görmedim ve asla kendim ayarlamam. Tarayıcılar şikayet etmiyor.

Otherside yaşıyorum benim, senin kadar benzer bir kurulum var:

Benim durumumda
public abstract class MyModule : NancyModule 
    protected MyModule(bool hasRazorView = true) 
     After.AddItemToEndOfPipeline((ctx) => ctx.Response 
      .WithHeader("Access-Control-Allow-Origin", "*") 
      .WithHeader("Access-Control-Allow-Methods", "POST,GET") 
      .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type")); 
     . . . . 
    } 
} 

, CORS benim GET ve POST değil SEÇENEKLER üzerinde gönderiyorlar. Options["/"] = route => new Response() ile varsayılan OPTIONS işlemeyi geçersiz kıldım. Bu, boru hattının geri kalanının ateşlenmesine izin verdi. Ben barındırma platformda bağımlı olduğundan bu gerçekten cevap olduğunu düşünmüyorum eğer,

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     // Shows UseCors with CorsPolicyBuilder. 
     app.UseCors(builder => 
      builder.WithOrigins(new[] { "http://localhost:4200" }).AllowAnyHeader() 
        .AllowAnyMethod() 
        .AllowCredentials() 
      ); 

     app.UseOwin(a => a.UseNancy(b => b.Bootstrapper = new NancyBootstrap(this.Container))); 

    } 
+2

: .NET Çekirdeğinin – peteski

0

, ben Yapılandırma yönteminde aşağıdaki kodu kullanarak CORS geçmesine başardı NancyFX ve OWIN'i çeşitli platformlarda barındırabilirdiniz. Soru, IIS'den de bahsetmiyor gibi görünüyor. :(