IIS 7 无法提供 .aspx 页面,但可以使用默认文件

IIS 7 无法提供 .aspx 页面,但可以使用默认文件

我已经将 ASP.NET 4 网站部署到 Windows Server 2008 上的 IIS 7。当我浏览到根文件夹或站点中的任何其他文件夹时,服务器会按照Default.aspx您的预期提供默认页面。但是,当我请求带有扩展名的特定页面时.aspx,我收到 404 错误。

例如,当我请求:

http://localhost/MyWeb/

服务器成功传送http://localhost/MyWeb/Default.aspx。但是,如果我明确请求:

http://localhost/MyWeb/Default.aspx

然后 IIS 响应 404 错误。

错误详细信息如下:

Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error code: 0x80070002

.NET 框架显然已安装并正常运行,因为我可以访问默认页面。顺便说一句,我观察到,当服务器出现故障并显示 404 错误页面时,我输入的 URL(例如http://localhost/MyWeb/Default.aspx)会删除扩展名(并显示http://localhost/MyWeb/Default)。

我尝试运行aspnet_iisreg -i并重新启动服务器,但情况并没有改变。

我遗漏了什么?谢谢。

更新。我在这里发布了web.config我的网站。没有其他适用于它的配置文件。

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>

  <appSettings>
    <add key="DatabaseServer" value="CONWAY\SQLEXPRESS"/>
    <add key="DatabaseName" value="KaleidoScape"/>
    <add key="User" value="KaleidoScapeUser"/>
    <add key="Password" value="Scape1!"/>
  </appSettings>

  <system.web>

    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />

    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
        <add tagPrefix="uc" tagName="FileGallery" src="~/Controls/FileGallery/FileGallery.ascx" />
      </controls>
    </pages>

    <authentication mode="Forms">
      <forms defaultUrl="~/App" loginUrl="~/Default.aspx" slidingExpiration="true" timeout="120" name="Incipit.KaleidoScape" />
    </authentication>

    <authorization>
      <allow users="*" />
    </authorization>

  </system.web>

  <location path="App">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>      
    </assemblyBinding>
  </runtime>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

更新。失败请求的 IIS 日志条目如下:

2016-10-23 21:13:22 127.0.0.1 GET /MyWeb/MyPage.aspx - 80 - 127.0.0.1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+WOW64;+Trident/5.0) 301 0 0 46
2016-10-23 21:13:22 127.0.0.1 GET /MyWeb/MyPage - 80 - 127.0.0.1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+WOW64;+Trident/5.0) 404 0 2 0

请注意,有两个条目。第一个对应于MyPage.aspx,这是我在 URL 字段中键入时请求的页面。这会导致 301(永久移动)错误。紧接着,有一个没有扩展名的同一页面的条目.aspx,这会导致 404 错误,子状态为 0。我不明白为什么完整的 URL 会得到 301,以及为什么服务器随后尝试传递(并失败)没有扩展名的页面。

更新。我刚刚做了一个有趣的实验。我在服务器上创建了一个新的 Web 应用程序,其中包含一个Test.aspx文件。它按预期工作,即服务器在您明确请求时提供页面。然后我从让我头疼的网站上复制了所有内容,然后Test.aspx停止工作!然后,我删除了此网站上除Test.aspx文件之外的所有内容,它并没有恢复工作,而是继续失败。总之,Web 内容中有些东西搞砸了事情,并且在您删除内容后仍然存在。这是我使用 Visual Studio 2015 使用 Bootstrap 附带的项目模板和其他一些东西创建的网站。我完全糊涂了。

答案1

经过大量研究,我找到了解决方案。我应该说我知道如何修复这个问题,但我仍然不确定为什么会出现这个问题。

该问题与 IIS 7 中提供的“友好 URL”机制有关。我通过更改代码来停用它们App_Start\RouteConfig.cs

var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);

到:

var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Off;
routes.EnableFriendlyUrls(settings);

这已经解决了问题。据我所知,友好的 URL 是关于删除文件扩展名的,我猜这就是为什么每次我请求页面时都会收到 301 错误,随后会尝试使用无扩展名的文件。但是,我不知道为什么 IIS 无法传递文件。

无论如何,现在已经修复。感谢所有帮助诊断问题的人。

相关内容