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プラグインをロードしています。
この例外を除いて、アプリケーションは正常に動作します。私はデバッグ中にそれをキャプチャすることができず、何度も何度も設定されているところを把握できません。
ありがとうございました。
ありがとう@mythz。ある時点で、OPTIONS呼び出し中、または認証されていない呼び出し中にAureliaを使用してCORSエラーを取得していたb/cを追加しました。ヘッダーが設定されていませんでした。しかし、これはうまくいった。とても有難い。 –