我编写了自定义表单身份验证模块,当我将其添加到我的MVC2应用程序的web.config并在IIS7.5下运行时,我收到HTTP 403.14错误。如果我尝试导航到任何路由的Url,那么我只会得到404错误。令人讨厌的是,我使用Cassini进行了所有测试,没有任何问题。我已经应用了所有类似问题的所有修复无济于事。问题似乎是我的模块已注册Mvc Routing停止工作。显然它似乎暗示我的模块,但为什么它一直使用内置的网络服务器?这是我的web.config的System.x部分:
<system.web>
<compilation debug="true" defaultLanguage="c#" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" />
</assemblies>
</compilation>
<authentication mode="Forms">
<forms defaultUrl="/" loginUrl="/Authentication/Login" enableCrossAppRedirects="true" name=".GKAUTH" path="/" requireSSL="false" timeout="1440" />
</authentication>
<membership defaultProvider="GatekeeperMembershipProvider" userIsOnlineTimeWindow="120">
<providers>
<clear />
<add name="GatekeeperMembershipProvider" type="Ewdev.Security.MembershipProviders.GatekeeperMembershipProvider, Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" connectionStringName="Ewdev Database" minRequiredPasswordLength="7" minRequiredAlphabeticCharacters="3" minRequiredAlphabeticCaseChanges="1" minRequiredNumericCharacters="1" minRequiredNonAlphanumericCharacters="0" passwordWordsPolicy="true" passwordHistoryPolicy="13" enablePasswordRetrieval="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" minRequiredUserNameLength="6" minRequiredUserNameAlphabeticCharacters="1" minRequiredUserNameNumericCharacters="0" userNameEnableNonAlphanumeric="true" userNameWordsPolicy="true" />
</providers>
</membership>
<customErrors mode="On" />
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Linq" />
<add namespace="System.Collections.Generic" />
</namespaces>
</pages>
<trace enabled="false" mostRecent="true" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="true" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
<add name="FormsAuthentication" type="Ewdev.Security.GatekeeperFormsAuthenticationModule" preCondition="" />
</modules>
<handlers>
<remove name="MvcHttpHandler" />
<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
这一切都在我的Windows 7 x64桌面上运行,包括VS2010,.NET 4和Mvc2。我在IIS中安装/注册了ASP.NET4。我怀疑你可能想知道模块中的内容但是源很长,所以我不知道哪个位是相关的。它是根据与内置API规范相同的API规范构建的,但除了在需要时重定向到Login页面,请求Url没有其他更改,并且在尝试显示对所有人开放的主页时出现错误。我已经读过它可能与非aspx资源有关,例如脚本,css,图像文件,因为模块被设置为应用于所有资源类型?在Url路由模块之后调用我的模块的其他想法,但我不相信那个,第三个可能没有调用Global.asax?我在第3天在这个上撕开我的头发,主要是因为我估计1小时将网站安装到IIS上...... Doh!
非常感谢我能得到的任何帮助,并且非常乐意重写我的模块,只要我能解决IIS不喜欢的问题。卡西尼喜欢它: - (
答案 0 :(得分:3)
我终于有了解决方案!但这是极端模糊的,并且花了我一周的时间来猜测。
我确信这个问题与路由有关,很多人都说你需要添加 HTTP重定向特殊角色。我已经添加了 HTTP错误和静态内容压缩。最终的解决方案是重新安装这3个角色!这表明在IIS世界中安装东西的顺序非常重要,因为我在安装MVC2之前已经设置了IIS7.5(通过VS2010安装),尽管我已经多次完成了其他修复(aspnet_regiis -i for ASP.NET 4.0 x86和x64)这还没有解决路由问题。如果我先安装VS2010(包含MVC2)然后安装IIS7.5我怀疑我不会遇到问题。除此之外,不管你信不信,完全重新安装IIS7.5确实不修复了问题,就像我几天前已经尝试过的那样。因此,为了回顾并包含任何其他必要的配置,以下是重要的修复:
确保您已运行aspnet_regiis -i 对于Framework / v4 ......和 Framework64 / V4 ...
确保您已允许ASP.NET v4 对于IIS中的32位和64位 (通过IIS管理器,单击 树中的服务器条目然后转到 ISAPI和CGI限制)
确保您有 HTTP错误和 HTTP 重定向常见的HTTP IIS特殊 角色和静态内容压缩 性能IIS特殊角色 安装。如果你拥有那么 卸载并重新安装,这是 什么最终解决了这个问题 我
请注意: IIS7 的情况也是如此,因为我必须在生产 Windows 2008服务器上执行完全相同的过程。我希望这有助于其他人快速解决问题。由于这个问题,我现在可能会失去合同,因为我已经落后了。
我原来的web.config在其中有几个不必要的条目,因为我正在尝试人们想出的任何和所有解决方案,所以以下是我当前和工作的System.x部分的web.config 强>:
<system.web>
<compilation debug="true" defaultLanguage="c#" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" />
</assemblies>
</compilation>
<authentication mode="Forms">
<forms defaultUrl="/" loginUrl="/Authentication/Login" enableCrossAppRedirects="true" name=".GKAUTH" path="/" requireSSL="false" timeout="1440" />
</authentication>
<membership defaultProvider="GatekeeperMembershipProvider" userIsOnlineTimeWindow="120">
<providers>
<clear />
<add name="GatekeeperMembershipProvider" type="Ewdev.Security.MembershipProviders.GatekeeperMembershipProvider, Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" connectionStringName="Ewdev Database" minRequiredPasswordLength="7" minRequiredAlphabeticCharacters="3" minRequiredAlphabeticCaseChanges="1" minRequiredNumericCharacters="1" minRequiredNonAlphanumericCharacters="0" passwordWordsPolicy="true" passwordHistoryPolicy="13" enablePasswordRetrieval="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" minRequiredUserNameLength="6" minRequiredUserNameAlphabeticCharacters="1" minRequiredUserNameNumericCharacters="0" userNameEnableNonAlphanumeric="true" userNameWordsPolicy="true" />
</providers>
</membership>
<customErrors mode="On" />
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Linq" />
<add namespace="System.Collections.Generic" />
</namespaces>
</pages>
<trace enabled="false" mostRecent="true" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="true" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
<add name="FormsAuthentication" type="Ewdev.Security.GatekeeperFormsAuthenticationModule" />
</modules>
</system.webServer>
答案 1 :(得分:1)
我无法在用户自己的答案中添加评论(评分太低?)。无论如何,在与我的服务器战斗了很长时间后试图解决403.14消息我偶然发现了这个问题。答案中的步骤最终为我解决了问题。
我猜测有效的部分是角色的安装,因为我已经尝试过在这里和其他地方建议的所有其他内容。
非常感谢用户和stackoverflow:)
答案 2 :(得分:0)
我的猜测是你错误地设置了你的MvcHttpHandler。 path属性应为*而不是* .mvc