IIS 7.5

时间:2015-10-01 21:06:38

标签: c# asp.net asp.net-web-api iis-7.5 url-routing

我正在使用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路由拒绝工作。

1 个答案:

答案 0 :(得分:0)

尝试将此属性添加到&lt;模块&gt; web.config中的标记

runAllManagedModulesForAllRequests="true"