我正在使用ASP.Net 4.5和Web Api 2属性路由实现RESTful Web服务主机。我还包括Web Api Help Pages。当我在IIS Express上通过Visual Studio 2012在本地运行它时效果很好,看起来非常酷;它显示默认的/ home / index页面,其中包含API菜单,其中显示了我所有RESTful API函数的文档。我还使用SOAPUI测试了所有API方法,并在本地运行,一切都运行良好。
但是,在Windows 2008 Server R2上部署到IIS 7.5时,URL路由绝对拒绝工作。
当我浏览网站时,我得到了:
403 - 禁止访问:拒绝访问。
如果我尝试/ home / index或我的web api方法的任何路由,我得到:
404 - 找不到文件或目录。
我在服务器上安装了.Net 4.5,然后转到Windows \ Microsoft.NET \ Framework64并运行:
Aspnet_regiis -i
IISRESET
我将我的应用程序部署到IIS并将应用程序池设置为使用.Net Framework v4.0.30319和托管管道模式:集成。
我的web.config中有以下设置:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="None" />
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
我在web.config条目上尝试了很多不同的变体。例如,this post中的建议也不起作用:
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
<!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>
更改像这样的处理程序部分也没有任何效果:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<remove name="WebDAV" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
我确实尝试打开目录浏览,然后它显示网站内容很好,所以403 Forbidden错误是因为禁止目录浏览。
但我不想浏览内容,我希望URL路由能够正常工作。在RouteConfig.cs文件中,我有一个默认路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
因此,如果URL路由正常,则默认情况下应显示Home / Index视图。
我还尝试将Index.html文件添加到网站,这也很好。所以网站作为一个网站工作正常,但URL路由拒绝工作。
答案 0 :(得分:0)
尝试将此属性添加到&lt;模块&gt; web.config中的标记
runAllManagedModulesForAllRequests="true"