我有两个现有的应用程序在IIS 8.5中运行,一个是ASP.NET,另一个是.NET核心。ASP.NET应用程序在IIS日志中正确写入cs-username字段,但.NET核心应用程序只显示一个连字符。
我发现了一个article和一个forum post,它们建议在applicationhost.config文件中添加一些xml,但是我没有它所引用的<advancedlogging>
分支。
如果解决方案是简单地按照文章,那么有人能解释一下为什么我的配置文件的格式不像他们的那样,以及我应该把建议的xml放在哪里吗?否则,是否有任何人都知道的唯一解决方案?
2条答案
按热度按时间hgb9j2n61#
我有两个变通方法来记录asp.net核心应用程序和IIS中的用户名。
1.在核心应用中,将用户添加到服务器变量中,然后在IIS中记录自定义字段。这仅在使用进程中托管模型时有效。
在您的应用中添加:
在IIS站点中转到
Logging > Select Fields > Add Field
。设置字段名称:身份验证用户,源类型:服务器变量,源:AUTH_USER。接受并应用所有更改。使用自定义字段会导致IIS使用其他日志文件名。你可能需要更新监视应用程序或脚本才能查看这些文件。
(Name当身份验证服务接受请求,但没有足够的信息显示所有细节时,可以为null。例如,没有soap name属性的SAML请求。我使用?来区分它与日志中的anonymous。)
1.使用W3C Logger middleware。这不会记录到IIS日志文件,但会将cs-username记录到其自己的日志文件中。你需要允许应用程序池对你选择记录到的文件夹具有写入权限。这也意味着你可能会将相同的信息记录两次。
rseugnpd2#
你在iis中使用匿名认证吗?这应该是cs-username没有显示的原因,如果你在www.example.com核心应用程序中使用windows认证asp.net,你将填充cs-username。
在ASP.NET中,它是IIS处理管道中的ISAPI过滤器。因此,IIS可以访问该信息并将其记录下来。ASP.NET核心应用程序则不是这样。ASPNET核心使用自己的Web服务器(称为kestrel),IIS只是充当代理。从技术上讲,IIS不知道该请求\响应发生了什么。它只是接收请求并向请求者提供响应。