2017-08-08 11 views
1

私はServiceStack Apiプロジェクトをロードする際に例外が発生します。ここでServiceStack出力があります:ServiceStack - CORSモジュールを2回追加しますか?

public override void Configure(Container container) 
    { 
     var allowedOrigin = CloudConfigurationManager.GetSetting("CORS.AllowedOrigin"); 

     Plugins.Add(new CorsFeature(allowedOrigins: allowedOrigin, allowedHeaders: "Content-Type,Authorization")); 
     Plugins.Add(new ValidationFeature()); 

     ServiceStack.Text.JsConfig.EmitCamelCaseNames = true; 
     SetConfig(new HostConfig 
     { 
      DefaultContentType = MimeTypes.Json, 
      EnableFeatures = Feature.All.Remove(Feature.Html), 
      GlobalResponseHeaders = 
      { 
       { "Access-Control-Allow-Origin", allowedOrigin }, 
       { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH" }, 
       { "Access-Control-Allow-Headers", "Content-Type,Authorization" }, 
      } 
     }); 

     var connectionString = ConfigurationManager.ConnectionStrings["BareCove.ConnectionString"].ConnectionString; 
     var dbFactory = new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider); 

     container.Register<IDbConnectionFactory>(c => new MultiTenantDbFactory(dbFactory)); 

     PreRequestFilters.Add((req, res) => { 
      // Handles Request and closes Response after emitting global HTTP Headers 
      if (req.Verb == "OPTIONS") 
      { 
       res.StatusCode = 200; 
       res.EndRequest(); 
      } 
     }); 

     GlobalRequestFilters.Add((req, res, dto) => 
     { 

     }); 

     ServiceExceptionHandlers.Add((req, request, exception) => 
     { 
      // Log 
      // 
      _exceptionLogger?.Invoke($"Service exception caught in AppHost.cs.", new[] { exception }); 

      // Continue with default error handling 
      // 
      return null; 

      // Or return your own custom response 
      // return DtoUtils.CreateErrorResponse(request, exception); 
     }); 

     // Handle unhandled exceptions outside of services 
     // 
     UncaughtExceptionHandlers.Add((req, res, operationName, exception) => 
     { 
      // Log. TODO: incorporation operationName into message 
      // 
      _exceptionLogger?.Invoke($"Unhandled exception caught in AppHost.cs. Operation: {operationName}.", new[] { exception }); 

      res.Write("Error: {0}: {1}".Fmt(exception.GetType().Name, exception.Message)); 
      res.EndRequest(skipHeaders: true); 
     }); 

     ConfigureAuth(new Lazy<IDbConnectionFactory>(() => new MultiTenantDbFactory(dbFactory))); 
    } 

だから、何とか私が複数回プラグインCORSを登録しています:

"startUpErrors": [{ 
    "errorCode": "ArgumentException", 
    "message": "An item with the same key has already been added.", 
    "stackTrace": "[Object: 8/8/2017 6:47:38 PM]:\n[REQUEST: ]\n 
    System.ArgumentException: An item with the same key has already been added.\r\n 
    at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)\r\n 
    at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)\r\n 
    at ServiceStack.CorsFeature.Register(IAppHost appHost)\r\n 
    at ServiceStack.ServiceStackHost.LoadPluginsInternal(IPlugin[] plugins)", 
    "errors": [] 
}], 

ここに私AppHost.csの私の設定方法ファイルです。または、他のモジュールがCORSプラグインをロードしています。

この例外を除いて、アプリケーションは正常に動作します。私はデバッグ中にそれをキャプチャすることができず、何度も何度も設定されているところを把握できません。

ありがとうございました。

答えて

0

GlobalResponseHeadersPreRequestFiltersを削除すると、すでにCorsFeatureプラグインによって追加されています。

+0

ありがとう@mythz。ある時点で、OPTIONS呼び出し中、または認証されていない呼び出し中にAureliaを使用してCORSエラーを取得していたb/cを追加しました。ヘッダーが設定されていませんでした。しかし、これはうまくいった。とても有難い。 –

関連する問題