添加 log4net 配置时的 CORS 问题
CORS issue when adding log4net config
上下文:
我有一个带有控制器和动作的简单 Web API 项目。
在每个请求的 header 中,我添加了一个授权令牌。
一切都按预期工作。我可以根据一些凭据请求令牌,并使用它来成功发出 HTTP 请求。
问题:
当我在 web.config 中添加以下内容时:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="logfile.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date: %-5level – %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
我收到以下错误:
XMLHttpRequest cannot load http://localhost:4042/token. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 500.
如果我删除 log4net 的配置,一切都会按预期工作。
注意: 我在 web.config 中没有任何设置会在请求中添加 header。
Startup.cs 是项目中我指定的唯一点:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
问题:log4net 配置与预检请求有何关系?
(基于我对 ASP.NET 框架的有限了解,我会说它是 non-sense)。有没有我遗漏的微妙之处?
我查看了我项目的 webconfig,其中有一部分来自工作 web.config
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
...
</log4net>
也许你错过了configSection
?
使用外部设置文件来避免这个问题:
启动时,调用:
XmlConfigurator.Configure();
在您的 Web.config 中,在 appSettings 中指定 log4net.Config:
<add key="log4net.Config" value="Log.config" />
在 Log.config 文件中放置您的配置:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="logfile.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date: %-5level – %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
<log4net>
上下文:
我有一个带有控制器和动作的简单 Web API 项目。 在每个请求的 header 中,我添加了一个授权令牌。 一切都按预期工作。我可以根据一些凭据请求令牌,并使用它来成功发出 HTTP 请求。
问题: 当我在 web.config 中添加以下内容时:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="logfile.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date: %-5level – %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
我收到以下错误:
XMLHttpRequest cannot load http://localhost:4042/token. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 500.
如果我删除 log4net 的配置,一切都会按预期工作。
注意: 我在 web.config 中没有任何设置会在请求中添加 header。
Startup.cs 是项目中我指定的唯一点:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
问题:log4net 配置与预检请求有何关系? (基于我对 ASP.NET 框架的有限了解,我会说它是 non-sense)。有没有我遗漏的微妙之处?
我查看了我项目的 webconfig,其中有一部分来自工作 web.config
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
...
</log4net>
也许你错过了configSection
?
使用外部设置文件来避免这个问题:
启动时,调用:
XmlConfigurator.Configure();
在您的 Web.config 中,在 appSettings 中指定 log4net.Config:
<add key="log4net.Config" value="Log.config" />
在 Log.config 文件中放置您的配置:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="logfile.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date: %-5level – %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
<log4net>