ASP.NET网站IIS部署核心三关:扩展映射、通配符路由与权限配置

发布时间:2026/6/16 22:32:38

ASP.NET网站IIS部署核心三关:扩展映射、通配符路由与权限配置 1. 项目概述为什么部署ASP.NET网站不是“复制粘贴”就能跑起来在IIS6和IIS7.5上部署一个ASP.NET网站对很多刚从Visual Studio开发环境走出来的程序员来说常有一种“明明代码没问题怎么一放IIS就报错”的挫败感。我带过十几支小团队几乎每支队伍的新人都会卡在同一个地方把本地调试好好的网站丢进IIS浏览器里弹出“HTTP Error 404.3 - Not Found”或者“HTTP Error 500.22 - Internal Server Error”然后对着错误日志发呆半小时。这不是你技术不行而是ASP.NET的运行机制和IIS的请求处理模型之间存在几道必须手动打通的“关卡”。这些关卡在VS自带的开发服务器Cassini里是自动绕开的但IIS不会替你做任何假设——它只认配置。核心关键词其实就三个扩展名映射、通配符处理、权限控制。它们分别对应着IIS如何把一个URL请求“交到”ASP.NET手里以及ASP.NET拿到请求后有没有权限去读写文件或数据库。比如你看到/mvc/Customers这个地址能正常打开但点一下/AjaxStyle/SetStyle.cspx就404问题根本不在你的C#代码而在于IIS压根没把.cspx这个后缀的请求转发给ASP.NET引擎再比如你填好了SQL Server连接字符串却提示“登录失败”十有八九不是密码错了而是SQL Server服务进程sqlservr.exe运行所用的Windows账户没有被授予访问你那个MyNorthwind.mdf文件所在目录的“读取写入”权限。这些细节web.config里一句也写不出来必须靠你在IIS管理器里亲手点出来。这篇文章要讲的就是如何像修车师傅一样拿着示波器Fiddler/Firebug、扳手IIS管理器和螺丝刀Windows安全策略一步步定位、拆解、修复这三道关卡。我不讲抽象概念只说你鼠标该点哪里、对话框里哪个复选框绝对不能勾、哪行配置改错一个字符就会让整个网站瘫痪。所有操作都基于真实生产环境验证过Windows Server 2003 IIS6 和 Windows 7 IIS7.5 这两套最典型的组合。你会发现IIS6像一台需要手动调校的老式柴油机每个喷油嘴扩展名映射都得你亲自拧紧而IIS7.5则像一辆预设好ECU的现代轿车你只要把“发动机参数表”web.config里的system.webServer节填对它自己就能完成大部分匹配。但无论新旧底层逻辑没变IIS是门卫ASP.NET是管家web.config是管家的指令手册而Windows权限是门卫的上岗证。缺了哪一环门都进不去。2. 核心设计思路IIS6与IIS7.5的本质差异与选型逻辑2.1 为什么必须区分IIS6和IIS7.5——管线模型的根本性重构很多人以为IIS7.5只是IIS6的“界面升级版”点点鼠标更方便而已。这是个致命误解。真正决定部署难易度的是二者背后完全不同的请求处理管线Request Processing Pipeline。这个差异直接决定了你配置的工作量、出错概率甚至影响你后续的架构选型。IIS6采用的是经典的两阶段分离模型。第一阶段由IIS内核处理它收到一个HTTP请求比如GET /Default.aspx先检查URL后缀.aspx然后查自己维护的“扩展名-可执行文件”映射表。如果找到就把这个请求转给对应的ISAPI筛选器aspnet_isapi.dll如果没找到比如.cspx直接返回404连ASP.NET的边都摸不到。第二阶段才是ASP.NET自己的事aspnet_isapi.dll把请求交给ASP.NET运行时后者再根据web.config里的httpHandlers节匹配path*.cspx这样的规则最终路由到你的AjaxHandlerFactory。你看这里存在两次独立的匹配IIS一次ASP.NET一次。你必须在两个地方都配对缺一不可。这就是为什么IIS6部署总让人提心吊胆——多一道环节就多一个出错点。IIS7.5则彻底重构为统一集成管线Integrated Pipeline。它把IIS内核和ASP.NET运行时“焊死”在一起。当请求进来IIS不再按后缀粗暴分流而是直接把整个HTTP上下文包括Headers、Body、QueryString一股脑儿交给ASP.NET。ASP.NET此时既是“处理器”又是“配置中心”它能直接读取web.config里的system.webServerhandlers配置并实时生效。你写的add path/mvc/* verb* typeMyMVC.MvcPageHandlerFactory... /IIS7.5会原样照搬无需你在IIS管理器里额外添加任何映射。这种设计下web.config成了唯一的真理来源部署逻辑瞬间清晰写好config建好站点搞定权限完事。我实测过一个标准的MVC2网站在IIS7.5上从解压到可访问平均耗时3分17秒在IIS6上光是排查/mvc/*通配符映射失败导致的500错误就可能耗掉你一整个下午。提示如果你的项目必须兼容IIS6比如客户还在用Windows Server 2003那么你的web.config里httpHandlers的path属性必须极度简化只能用*.ext格式。像path/mvc/*或path*Ajax*/*.cspx这种正则风格的写法在IIS6的ISAPI映射里是无效的强行使用只会让你的网站在本地跑得好好的一上服务器就集体失联。2.2 经典模式 vs 集成模式IIS7.5的兼容性开关IIS7.5为了照顾海量存量IIS6应用提供了一个叫“经典模式Classic Mode”的兼容开关。开启它IIS7.5就假装自己是IIS6走两阶段分离的老路关闭它即使用默认的“集成模式”才发挥统一管线的优势。这个开关藏在应用程序池的高级设置里位置隐蔽但影响巨大。我强烈建议新项目一律使用集成模式老项目迁移时优先尝试集成模式。原因很实在经典模式下你依然要面对IIS6时代的所有坑——扩展名映射、通配符配置、system.web和system.webServer配置并存且容易冲突。而集成模式下system.webServer是唯一权威system.web里的httpHandlers会被忽略除非你显式启用兼容性。这意味着你不用再纠结“这个handler该写在哪个section里”也不用担心IIS6的旧脚本在IIS7.5上因配置重复而报错。我在一个金融客户的迁移项目中做过对比同样一套ASP.NET Web Forms代码在经典模式下需要修改7处web.config配置并添加3条IIS映射切换到集成模式后只保留system.webServer里的handlers其他全部删掉重启应用池一次通过。注意切换模式后必须重启应用池仅重启网站无效。因为应用池的管线模式是在进程启动时加载的运行中无法热切换。这点和IIS6完全不同IIS6里改个映射点下“确定”就立刻生效。2.3 工具链选择为什么坚持用Fiddler2和Windows任务管理器部署过程中90%的“神秘错误”都源于信息不对称你看到的是浏览器的404页面但真正的问题可能发生在IIS拒绝转发、ASP.NET找不到handler、还是SQL Server权限不足这时候依赖IIS日志%SystemDrive%\inetpub\logs\LogFiles效率太低日志里全是时间戳和状态码看不出上下文。我的固定搭档是Fiddler2和Windows任务管理器。Fiddler2是HTTP协议的“透视镜”。当你点击页面上的/AjaxStyle/SetStyle.cspx链接Fiddler能清晰显示第一行是浏览器发出的GET http://localhost:25678/AjaxStyle/SetStyle.cspx请求第二行是IIS返回的HTTP/1.1 404 Not Found响应关键是第三行X-AspNet-Version: 2.0.50727—— 这说明请求压根没进ASP.NET因为如果进了响应头里会有X-AspNetMvc-Version之类的标识。这就一锤定音问题出在IIS到ASP.NET的“桥”断了下一步直接去IIS管理器查.cspx映射而不是去翻C#代码。Windows任务管理器则是权限问题的“定位仪”。当XML写入失败或SQL Server附加数据库报“拒绝访问”你第一反应不该是瞎猜“是不是NETWORK SERVICE权限不够”而是打开任务管理器→“详细信息”页→找到w3wp.exeIIS工作进程和sqlservr.exeSQL Server进程→右键“转到服务”→看它们关联的服务名如W3SVC、MSSQL$SQLEXPRESS→再右键服务名“属性”→“登录”选项卡确认实际运行账户。这个过程比查文档快十倍而且100%准确。我见过太多人凭记忆去C:\Windows\System32\inetsrv\config\applicationHost.config里找identity结果发现那只是应用池的默认设置实际运行账户可能被覆盖为ApplicationPoolIdentity。3. IIS6深度实操三步打通请求通道与权限闭环3.1 扩展名映射手把手配置.cspx与.ascx的ISAPI接管在IIS6中让.cspx这类自定义扩展名生效本质是告诉IIS“凡是带.cspx后缀的请求别自己处理转给ASP.NET的ISAPI模块去办。”这个过程看似简单但有三个极易踩中的陷阱我用一个真实案例说明。场景还原你下载了MyMVC DEMO解压到D:\MyMVC在IIS6里新建网站主目录指向D:\MyMVC绑定端口25678。浏览器访问http://localhost:25678首页正常但点击右上角【3】切换皮肤Fiddler抓包显示GET /AjaxStyle/SetStyle.cspx返回404。打开web.config确认httpHandlers里有add path*.cspx ... /。现在开始配置。第一步定位ISAPI路径关键不要试图手打aspnet_isapi.dll路径。正确姿势是在IIS管理器中展开“网站”→右键你的网站→“属性”→“主目录”选项卡→点“配置”按钮。在弹出的“应用程序配置”窗口里找到已存在的.aspx条目通常排在最前面双击它。你会看到一个对话框其中“可执行文件”栏显示类似C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll的完整路径。立即复制这个路径CtrlC然后点“取消”退出。为什么不能点“确定”因为点“确定”会触发IIS验证而.aspx条目本身是受保护的修改它可能导致整个网站崩溃。我们只要它的路径值。第二步添加.cspx映射注意复选框回到“应用程序配置”窗口点“添加”按钮。在新弹出的对话框里“可执行文件”粘贴刚才复制的路径“扩展名”输入.cspx注意开头的点必须有“动作”保持默认的“限制为GET,HEAD,POST,DEBUG”最关键一步“确认文件是否存在”务必取消勾选这个复选框是IIS6最反直觉的设计。勾选它IIS会在磁盘上查找SetStyle.cspx这个物理文件找不到就直接404根本不把请求交给ASP.NET。而我们的.cspx是虚拟路径对应的是AjaxHandlerFactory的代码逻辑磁盘上当然没有这个文件。我曾帮一个客户排查他们勾选了这个框折腾两天以为是代码bug最后发现只是UI里一个复选框没取消。第三步验证与扩展.ascx同理点“确定”保存关闭所有对话框。重启网站右键网站→“停止”再“启动”。用Fiddler重新抓包这次应该能看到200 OK响应且响应体是你期望的JSON数据。对于.ascx用户控件这类IIS6默认禁止的扩展名配置方法完全相同复制.aspx的ISAPI路径添加.ascx映射同样取消“确认文件是否存在”。切记.ascx不是用来直接访问的但某些AJAX框架会把它当资源加载不配置照样404。实操心得IIS6的映射列表是有序的匹配规则是“从上到下第一个匹配”。所以把最常用的.aspx、.asmx放在前面自定义的.cspx放在后面。如果顺序乱了可能出现.cspx请求被上面某个宽泛规则如*.*截胡的诡异现象。3.2 通配符应用程序映射解决/mvc/*等无扩展名路由的终极方案当你的网站用了ASP.NET MVC或自定义路由URL变成/mvc/Customers、/api/products这种没有扩展名的形式时IIS6的扩展名映射就彻底失效了。因为IIS6的映射表只认后缀/mvc/*这种路径模式它根本看不懂。这时你必须启用“通配符应用程序映射Wildcard Application Mapping”这是IIS6为应对现代Web框架而留的后门。操作流程比扩展名映射多一步但更一劳永逸回到网站“属性”→“主目录”→“配置”→“应用程序配置”窗口点“插入...”按钮注意是“插入”不是“添加”在弹出的对话框里“可执行文件”粘贴.aspx的ISAPI路径同上“确认文件是否存在”同样必须取消勾选理由同上点“确定”你会看到新条目出现在映射列表最顶端类型显示为“通配符”。为什么必须放在最顶端通配符映射是“兜底”规则它会捕获所有未被前面精确扩展名匹配的请求。如果它排在.aspx下面那么/Default.aspx这种请求会被上面的.aspx条目吃掉而/mvc/Customers才会轮到通配符。但如果通配符在最上面它会先于所有其他规则生效确保所有请求包括.aspx都先经过ASP.NET。这听起来有点暴力但恰恰是IIS6支持MVC的唯一可靠方式。副作用与权衡启用通配符后你的网站性能会有微乎其微的下降每次请求多一次ISAPI调用但换来的是配置的极简——你不再需要为.cspx、.mvc、.api等一堆自定义后缀单独配置映射。所有路由逻辑都收归web.config的httpHandlers管理。我在一个电商后台项目中强制启用了通配符结果发现/admin/reports/sales.csv这种导出CSV的请求也能被CsvHandler完美处理而不用额外配.csv映射。不过这也意味着你必须确保web.config里httpHandlers的path规则足够严谨否则可能误伤静态资源如/images/logo.png被当成动态请求处理。解决方案是在httpHandlers里把静态资源排除掉例如add path*.png verb* typeSystem.Web.StaticFileHandler validatetrue/ add path*.jpg verb* typeSystem.Web.StaticFileHandler validatetrue/ add path/mvc/* verb* typeMyMVC.MvcPageHandlerFactory, MyMVC validatetrue/提示通配符映射一旦启用.cspx的单独映射就变得多余可以删除。但保留也无害只是多了一层冗余匹配。3.3 目录权限配置App_Data与SQL Server数据文件的写入授权实战ASP.NET网站崩溃的第二大原因不是代码而是权限。IIS6默认以NETWORK SERVICE账户运行工作进程w3wp.exe这个账户在Windows Server 2003上权限极低连读取C:\Inetpub\wwwroot下的文件都可能被拒更别说写入App_Data或SQL Server的.mdf文件了。配置权限不是“右键→属性→安全→添加用户→勾选完全控制”这么简单这里有精确到字节的操作规范。App_Data目录写入权限XML数据源场景在Windows资源管理器中导航到你的网站根目录如D:\MyMVC找到App_Data文件夹右键App_Data→“属性”→“安全”选项卡点“编辑”→“添加”→在“输入对象名称”框里输入NETWORK SERVICE注意空格大小写不敏感点“检查名称”确认点“确定”在下方权限列表中只勾选“写入”和“修改”其他全不勾。为什么因为App_Data里只存XML数据文件不需要执行权限“读取和执行”也不需要更改所有权“取得所有权”。过度授权是安全隐患的温床点“确定”保存。此时NETWORK SERVICE对App_Data拥有写入权但对父目录D:\MyMVC依然只有读取权符合最小权限原则。SQL Server数据文件权限.mdf附加场景SQL Server的权限问题更隐蔽。当你在SSMS里点击“附加”却报“操作系统错误5: 拒绝访问”问题往往不在数据库引擎而在Windows文件系统。关键是要找到sqlservr.exe进程的真实运行账户。打开Windows任务管理器→“详细信息”页→找到sqlservr.exe进程右键→“转到服务”→在服务列表中找到对应实例如MSSQL$SQLEXPRESS右键该服务→“属性”→“登录”选项卡确认“此账户”字段。在Windows Server 2003 SQL Server 2005 Express默认安装下它通常是.\SQLServer2005SQLAgentUser$YourMachineName$SQLEXPRESS或NT AUTHORITY\NETWORK SERVICE假设是NETWORK SERVICE那么你需要给MyNorthwind.mdf所在的整个目录如D:\MyMVC\db\赋予NETWORK SERVICE的“读取执行”、“列出文件夹内容”、“读取”、“写入”权限四者缺一不可。特别注意必须给目录赋权而不是单给.mdf文件赋权。因为SQL Server附加时会同时访问.mdf和.ldf日志文件如果日志文件缺失它会尝试在同目录下创建新的.ldf这就需要目录的“写入”权限。常见误区有人会给Everyone账户赋权以为“一劳永逸”。这是严重错误。Everyone包含所有用户包括潜在的恶意程序。正确的做法永远是“精准打击”——只给NETWORK SERVICE或你指定的具体服务账户授予权限且仅限于必需的目录和必需的权限。4. IIS7.5零配置部署集成模式下的web.config驱动范式4.1 system.webServer配置节IIS7.5的唯一真理之源IIS7.5的革命性在于它把web.config从“ASP.NET的私有配置文件”升级为“IIS与ASP.NET的联合宪章”。在集成模式下system.webServer节成为IIS7.5读取和执行的唯一依据system.web里的httpHandlers和httpModules被完全忽略。这意味着你的部署工作量从IIS6的“配置IIS配置web.config”压缩为“只配web.config”。但前提是你必须写对system.webServer。以MyMVC DEMO为例它需要支持三种请求模式*.cspx→AjaxHandlerFactory*.aspx→MvcPageHandlerFactory/mvc/*→MvcPageHandlerFactory对应的system.webServer配置如下system.webServer handlers !-- 处理.cspx请求 -- add nameCspxHandler path*.cspx verb* typeMyMVC.AjaxHandlerFactory, MyMVC resourceTypeUnspecified preConditionintegratedMode / !-- 处理.aspx请求 -- add nameAspxHandler path*.aspx verb* typeMyMVC.MvcPageHandlerFactory, MyMVC resourceTypeUnspecified preConditionintegratedMode / !-- 处理/mvc/*通配符请求 -- add nameMvcWildcardHandler path/mvc/* verb* typeMyMVC.MvcPageHandlerFactory, MyMVC resourceTypeUnspecified preConditionintegratedMode / /handlers /system.webServer关键参数解析name必须全局唯一用于IIS管理器中识别建议用业务含义命名如CspxHandlerpath支持通配符*和?/mvc/*这种路径模式IIS7.5原生支持无需通配符映射resourceType设为Unspecified表示不限制资源类型文件/目录/不存在的路径都匹配这是支持/mvc/Customers的关键preConditionintegratedMode这是安全阀。它确保这条规则只在集成模式下生效如果应用池意外切换到经典模式IIS会自动跳过此规则避免配置冲突导致500错误。提示IIS7.5的handlers配置会实时反映在IIS管理器的“处理器映射”功能页中。你添加一条add那里就多一行你删掉一行那里就少一行。这让你能直观验证配置是否生效是IIS6时代梦寐以求的功能。4.2 fileExtensions解锁让.cs、.ascx等“危险”扩展名合法化IIS7.5出于安全考虑对一些扩展名做了硬性封锁默认禁止访问。.csC#源码、.ascx用户控件、.config配置文件都在黑名单里。如果你的框架如FishWebLib DEMO用了.cs作为AJAX后缀直接访问会得到“HTTP Error 404.7 - Not Found”错误详情里明确写着“请求的文件扩展名被禁止”。这不是ASP.NET的问题是IIS7.5的security模块在拦截。解锁方法是在system.webServer里添加staticContent配置显式声明这些扩展名是允许的system.webServer staticContent !-- 解锁.cs扩展名 -- mimeMap fileExtension.cs mimeTypetext/plain / !-- 解锁.ascx扩展名 -- mimeMap fileExtension.ascx mimeTypetext/plain / /staticContent /system.webServer为什么mimeTypetext/plain因为.cs和.ascx本质上不是要被浏览器执行的资源而是要被ASP.NET后端处理的“数据载体”。设为text/plainIIS会把它当作纯文本返回但更重要的是这个声明告诉IIS“我知道这个扩展名允许它通过别拦着”。如果不设mimeTypeIIS会因找不到对应类型而拒绝请求。text/plain是最安全的选择它不会触发浏览器的下载或执行行为。注意staticContent配置需要配合handlers里的对应handler才能生效。比如你解锁了.cs但handlers里没有path*.cs的规则请求还是会落到IIS的静态文件处理器返回源码内容安全风险。所以解锁只是第一步必须紧接着在handlers里添加对应的handler确保请求被正确路由到你的工厂类。4.3 应用程序池身份从NETWORK SERVICE到ApplicationPoolIdentity的平滑过渡IIS7.5引入了一个更安全的应用程序池身份——ApplicationPoolIdentity。它为每个应用池创建一个唯一的、权限受限的虚拟账户如IIS APPPOOL\MyMVCAppPool比NETWORK SERVICE粒度更细、隔离性更强。但在迁移老项目时直接切换可能引发权限问题因为老代码习惯性地依赖NETWORK SERVICE的既有权限。平滑过渡三步法先验证旧身份在IIS管理器中展开“应用程序池”找到你的应用池如MyMVCAppPool右键→“高级设置”查看“标识”字段。如果是NetworkService记录下来切换新身份并授予权限将“标识”改为ApplicationPoolIdentity点“确定”。然后去App_Data目录和SQL Server数据目录添加新账户IIS APPPOOL\MyMVCAppPool并赋予与之前NETWORK SERVICE相同的权限写入、读取等更新web.config可选如果代码里有硬编码NETWORK SERVICE的地方如日志路径、临时文件夹需同步更新为新账户名。但绝大多数情况下只需授予权限即可。为什么推荐ApplicationPoolIdentity安全性每个应用池有独立账户A网站的漏洞无法横向渗透到B网站可审计性Windows事件日志里能清晰看到是哪个应用池在访问文件兼容性它自动继承IIS_IUSRS组的权限与IIS7.5的默认配置无缝衔接。我在一个政府项目中强制推行此方案成功规避了因NETWORK SERVICE权限过大导致的多次安全扫描告警。5. SQL Server配置与端口/域名绑定让网站走出localhost5.1 SQL Server Express实例连接localhost\sqlexpress的深层含义connectionStringserverlocalhost\sqlexpress;databaseMyNorthwind;integrated securitysspi;这串连接字符串里localhost\sqlexpress不是随便写的。localhost指本地机器\sqlexpress是SQL Server的命名实例Named Instance名称。SQL Server允许在同一台机器上安装多个实例每个实例有独立的端口、服务和配置。SQLEXPRESS是SQL Server 2005/2008 Express版的默认实例名。连接失败的三大根源实例未运行打开“服务”管理器services.msc找到SQL Server (SQLEXPRESS)确认状态为“正在运行”。如果被禁用右键→“启动”TCP/IP协议未启用SQL Server默认只启用共享内存协议远程连接或某些本地连接需要TCP/IP。打开“SQL Server 配置管理器”→“SQL Server 网络配置”→“SQLEXPRESS的协议”右键“TCP/IP”→“启用”然后重启SQL Server服务防火墙拦截SQL Server Express默认监听动态端口非1433Windows防火墙可能阻止。解决方案在“SQL Server 配置管理器”里为SQLEXPRESS的TCP/IP协议指定一个固定端口如1433然后在防火墙“入站规则”里放行该端口。Integrated SecuritySSPI的权限链integrated securitysspi表示使用当前Windows用户身份连接。但当前用户是谁在IIS环境下是w3wp.exe进程的运行账户NETWORK SERVICE或ApplicationPoolIdentity。所以NETWORK SERVICE不仅需要文件系统权限还需要SQL Server的登录权限。在SSMS里展开“安全性”→“登录名”右键→“新建登录名”在“登录名”框输入NT AUTHORITY\NETWORK SERVICE然后在“用户映射”页勾选你的数据库MyNorthwind并赋予db_owner角色。这才是完整的权限闭环。5.2 80端口与域名绑定告别丑陋的:25678使用非标准端口如25678部署虽然技术上可行但暴露了开发痕迹且不利于SEO和用户记忆。将网站迁移到80端口是专业部署的最后一步。IIS提供了两种主流方案方案一IP地址绑定适合多网卡或云服务器在Windows网络设置中为网卡添加一个新IP如192.168.0.222在IIS管理器中右键你的网站→“编辑绑定”→“添加”→类型选httpIP地址选192.168.0.222端口填80主机名留空确保没有其他网站绑定到*:80所有IP的80端口否则会冲突。优势简单直接不依赖DNS劣势需要额外IP资源。方案二主机头绑定推荐适合绝大多数场景在IIS管理器中右键网站→“编辑绑定”→“添加”→类型httpIP地址选*所有未分配IP端口80主机名填www.mymvc-demo.com在本地C:\Windows\System32\drivers\etc\hosts文件末尾添加127.0.0.1 www.mymvc-demo.com浏览器访问http://www.mymvc-demo.com即可看到网站。优势零成本完美模拟生产环境劣势仅限本机测试局域网内其他机器需同步修改hosts。提示主机头绑定是IIS的“虚拟主机”技术它让多个网站共享80端口IIS根据HTTP请求头里的Host字段如Host: www.mymvc-demo.com来决定把请求交给哪个网站。这是现代Web部署的标准实践。6. 常见问题速查与独家避坑指南6.1 HTTP错误代码速查表404、500、502背后的真相错误代码常见表现根本原因快速定位法解决方案404.3The MIME map policy is not configured for the URL extensionIIS7.5未解锁扩展名如.csFiddler看响应头X-Powered-By: ASP.NET是否存在在system.webServerstaticContent中添加mimeMap500.22An ASP.NET setting has been detected that does not apply in Integrated managed pipeline modeweb.config中system.web的httpHandlers在集成模式下冲突查看IIS日志搜索MODULE_SET_RESPONSE_ERROR_STATUS删除system.web里的httpHandlers只保留system.webServer500.23This configuration section cannot be used at this pathweb.config中system.web的modules或handlers在集成模式下非法IIS管理器→网站→“错误页”→点击500.23错误→“详细信息”同上移至system.webServer502.3Bad GatewayIIS与后端如w3wp.exe通信超时或失败任务管理器看w3wp.exe是否崩溃事件查看器搜Application Error增加应用池的“常规”→“启用32位应用程序”为True若引用32位DLL401.2Unauthorized: Logon failed due to server configurationWindows身份验证未启用或匿名访问被禁用IIS管理器→网站→“身份验证”看“匿名身份验证”是否启用启用“匿名身份验证”禁用“Windows身份验证”除非真需要6.2 我踩过的五个深坑与血泪教训坑一IIS6通配符映射的“幽灵”残留现象删除通配符映射后/mvc/*请求依然能访问但新添加的.cspx映射却失效。原因IIS6的通配符映射一旦启用会永久缓存到metabase.xml即使UI里删了底层配置还在。解法停止IIS服务net stop iisadmin /y用记事本打开%SystemRoot%\System32\inetsrv

相关新闻