作者:Luke Latham
某些本机 IIS 模块和所有 IIS 托管模块无法处理 ASP.NET Core 应用的请求。 在许多情况下,ASP.NET Core 提供了 IIS 本机和托管模块解决的方案的替代方案。
该表指示在使用 ASP.NET Core 应用和 ASP.NET Core 模块时正常工作的本机 IIS 模块。
模块 | 在 ASP.NET Core 应用内可用 | ASP.NET Core 选项 |
---|---|---|
匿名身份验证AnonymousAuthenticationModule |
是 | |
基本身份验证BasicAuthenticationModule |
是 | |
客户端证书映射身份验证CertificateMappingAuthenticationModule |
是 | |
CGICgiModule |
否 | |
配置验证ConfigurationValidationModule |
是 | |
HTTP 错误CustomErrorModule |
否 | 状态代码页中间件 |
自定义日志记录CustomLoggingModule |
是 | |
默认文档DefaultDocumentModule |
否 | 默认文件中间件 |
摘要式身份验证DigestAuthenticationModule |
是 | |
目录浏览DirectoryListingModule |
否 | 目录浏览中间件 |
动态压缩DynamicCompressionModule |
是 | 响应压缩中间件 |
请求跟踪失败FailedRequestsTracingModule |
是 | ASP.NET Core 日志记录 |
文件缓存FileCacheModule |
否 | 响应缓存中间件 |
HTTP 缓存HttpCacheModule |
否 | 响应缓存中间件 |
HTTP 日志记录HttpLoggingModule |
是 | ASP.NET Core 日志记录 |
HTTP 重定向HttpRedirectionModule |
是 | URL 重写中间件 |
HTTP 跟踪TracingModule |
是 | |
IIS 客户端证书映射身份验证IISCertificateMappingAuthenticationModule |
是 | |
IP 和域限制IpRestrictionModule |
是 | |
ISAPI 筛选器IsapiFilterModule |
是 | 中间件 |
ISAPIIsapiModule |
是 | 中间件 |
协议支持ProtocolSupportModule |
是 | |
请求筛选RequestFilteringModule |
是 | URL 重写中间件IRule |
请求监视器RequestMonitorModule |
是 | |
URL 重写†;RewriteModule |
是 | URL 重写中间件 |
服务器端包括ServerSideIncludeModule |
否 | |
静态压缩StaticCompressionModule |
否 | 响应压缩中间件 |
静态内容StaticFileModule |
否 | 静态文件中间件 |
令牌缓存TokenCacheModule |
是 | |
URI 缓存UriCacheModule |
是 | |
URL 授权UrlAuthorizationModule |
是 | ASP.NET Core 标识 |
Windows 身份验证WindowsAuthenticationModule |
是 |
†由于目录结构中的更改,URL 重写模块的 isFile
和 isDirectory
匹配类型不适用于 ASP.NET Core 应用。
当应用池的 .NET CLR 版本设置为“无托管代码” 时,托管 ASP.NET Core 应用的托管模块无法使用 。 ASP.NET Core 在几种情况下提供了中间件替代方案。
模块 | ASP.NET Core 选项 |
---|---|
AnonymousIdentification | |
DefaultAuthentication | |
FileAuthorization | |
FormsAuthentication | Cookie 身份验证中间件 |
OutputCache | 响应缓存中间件 |
配置文件 | |
RoleManager | |
ScriptModule-4.0 | |
会话 | 会话中间件 |
UrlAuthorization | |
UrlMappingsModule | URL 重写中间件 |
UrlRoutingModule-4.0 | ASP.NET Core 标识 |
WindowsAuthentication |
使用 IIS 管理器配置设置时,应用的 web.config 文件已更改。 如果部署应用并包括 web.config ,则使用 IIS 管理器所做的任何更改都会被部署的 web.config 文件覆盖。 如果更改服务器的 web.config 文件,请立即将服务器上已更新的 web.config 文件复制到本地项目。
如果在服务器级别配置了必须为应用禁用的 IIS 模块,则应用 web.config 文件还可以禁用该模块。 将模块留在原位并使用配置设置(如果可用)将其停用或从应用中移除模块。
许多模块提供一个配置设置,允许在不从应用中删除模块的情况下禁用它们。 这是停用模块最简单、快捷的方式。 例如,可使用 web.config 中的 <httpRedirect>
元素禁用 HTTP 重定向模块 :
<configuration> <system.webServer> <httpRedirect enabled="false" /> </system.webServer> </configuration>
有关通过配置设置禁用模块的详细信息,请按照 IIS <system.webServer> 的子元素 部分中的链接进行操作。
如果选择使用 web.config 中的设置删除模块,请先解锁此模块和 web.config 的 <modules>
部分 :
解锁服务器级别的模块。 在 IIS 管理器“连接” 边栏中选择 IIS 服务器。 打开 IIS 区域中的模块 。 在列表中选择该模块。 在右侧的“操作” 边栏中,选择“解锁” 。 如果该模块的操作条目显示为“锁定”,则该模块已被解锁,且无需任何操作 。 解锁尽可能多稍后计划从 web.config 中删除的模块。
在不使用 web.config 的 <modules>
部分的情况下部署应用 。如果使用包含 <modules>
部分的 web.config 部署应用,但未先在 IIS 管理器中解锁该部分,则配置管理器会在尝试解锁该部分时引发异常 。 因此,请在不使用 <modules>
部分的情况下部署该应用。
解锁 web.config 的 <modules>
部分 。在“连接” 边栏中,选择“站点”中的网站 。 在“管理” 区域中,打开“配置编辑器” 。 使用导航控件选择 system.webServer/modules
部分。 在右侧的“操作” 边栏中,选择“解锁” 该部分。 如果该模块的操作条目显示为“锁定部分”,则该模块已被解锁,且无需任何操作 。
可使用 <remove>
元素将 <modules>
部分添加到应用的本地 web.config 文件,从应用中删除模块 。 可添加多个 <remove>
元素来删除多个模块。 如果在服务器上更改 web.config ,请立即在本地对项目的 web.config 文件执行相同的更改。 以这种方式删除模块不会影响模块的使用与服务器上的其他应用。
<configuration> <system.webServer> <modules> <remove name="MODULE_NAME" /> </modules> </system.webServer> </configuration>
要使用 web.config 为 IIS Express 添加或删除模块,请修改 applicationHost.config 以解锁 <modules>
部分 :
打开 {APPLICATION ROOT}\.vs\config\applicationhost.config 。
找到 IIS 模块的 <section>
元素,并将 overrideModeDefault
从 Deny
更改为 Allow
:
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
找到 <location path="" overrideMode="Allow"><system.webServer><modules>
部分。 对于任何要删除的模块,请将 lockItem
从 true
设置为 false
。 在以下示例中,已解锁 CGI 模块:
<add name="CgiModule" lockItem="false" />
解锁 <modules>
部分和单个模块后,可使用应用的 web.config 文件添加或删除 IIS 模块,以便在 IIS Express 上运行应用 。
IIS 模块还可以使用 Appcmd.exe 删除 。 该命令中提供 MODULE_NAME
和 APPLICATION_NAME
:
Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME
例如,从默认网站中删除 DynamicCompressionModule
:
%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"
要求运行 ASP.NET Core 应用的模块只有匿名身份验证模块和 ASP.NET Core 模块。
URI 缓存模块 (UriCacheModule
) 允许 IIS 在 URL 级别缓存网站配置。 不使用此模块的话,即使重复请求相同的 URL,IIS 也必须读取并分析每个请求的配置。 分析每个请求的配置会导致严重的性能损失。 虽然托管的 ASP.NET Core 应用并非严格要求运行 URI 缓存模块,但我们建议为所有 ASP.NET Core 部署启用 URI 缓存模块。
HTTP 缓存模块 (HttpCacheModule
) 实现 IIS 输出缓存以及用于在 HTTP.sys 缓存中缓存项目的逻辑。 如果不使用此模块,内容不再以内核模式缓存,并且缓存配置文件将被忽略。 删除 HTTP 缓存模块通常会对性能和资源使用情况产生不利影响。 虽然托管的 ASP.NET Core 应用程序并非严格要求运行 HTTP 缓存模块,但我们建议为所有 ASP.NET Core 部署启用 HTTP 缓存模块。