我正在尝试理解为什么在浏览虚拟目录时我的默认文档没有出现。如果我像我应该的那样浏览网站,我就明白了:
但是,如果我将网页添加到网址,则会显示:
一个SO answer建议删除除真实文档之外的所有默认文档(在IIS中)。我试过了(图片如下),但没有帮助。
使用根URL(http://localhost/SignalRChat
)时,为什么IIS不会提供该页面?
这是删除默认文档后的web.config的相关部分:
<defaultDocument>
<files>
<remove value="default.aspx" />
<remove value="iisstart.htm" />
<remove value="index.html" />
<remove value="index.htm" />
<remove value="Default.asp" />
<remove value="Default.htm" />
<add value="ChatPage.cshtml" />
</files>
</defaultDocument>
这是处理程序部分:
<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>
答案 0 :(得分:2)
当您的请求未指向URL末尾的特定文件名时,404错误的另一个可能原因是您的IIS请求过滤规则拒绝无扩展请求。
要确定这一点,请找出404错误的子代码。 通常,它是404.7,但可能会有一些变化,
此外,您可以尝试明确允许无扩展请求,方法是将<add fileExtension="." allowed="true" />
添加到您的web.config中,如下所示:
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<add fileExtension="." allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
如果它帮助或用子代码发布确切的404错误,请告诉我。
答案 1 :(得分:1)
从您的标签看起来您使用MVC和使用剃刀视图引擎(cshtml)的视图。在MVC中,URL不直接映射到文档。所以讨论不应该是关于默认文档,处理程序和IIS配置。
URL必须与定义的路由匹配,该路由会在控制器上调用操作。然后,此操作将呈现视图(* .cshtml)。
尝试修复您的路线以便能够处理请求。如果您需要更多帮助,您应该使用有关控制器和路线的更多信息更新您的问题。
答案 2 :(得分:0)
您可以创建一个网站/应用程序安装程序。它可以选择设置启动页面选择。
因此,将ChatPage.cshtml设置为安装程序中的启动页面,安装后如果键入localhost / SignalIRChat
您将看到ChatPage.cshtml的内容,而不会在地址栏中显示“ChatPage.cshtml”名称。
它将解决您的问题。
答案 3 :(得分:0)
您需要在Handler
部分的末尾添加此handlers
:
<add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
<强>更新强>
由于.cshtml
文件默认被阻止,您需要:
<handlers>
<remove name="cshtml-ISAPI-4.0_64bit" />
<remove name="cshtml-ISAPI-4.0_32bit" />
<remove name="cshtml-Integrated-4.0" />
<remove name="cshtm-ISAPI-4.0_64bit" />
<remove name="cshtm-ISAPI-4.0_32bit" />
<remove name="cshtm-Integrated-4.0" />
</handlers>
<staticContent>
<mimeMap fileExtension=".cshtml" mimeType="text/html" />
</staticContent>
删除建议的StaticFile
处理程序(如果仍然存在)。
答案 4 :(得分:0)
这可能是一个MVC问题。
您可能需要在SignalRChat控制器中将索引重定向到此其他操作。
如下所示:
public ViewResult Index()
{
return View("ChatPage");
}
答案 5 :(得分:-4)
似乎您的目录浏览在IIS中被禁用。刚刚启用了IIS中的目录浏览。它会解决你的问题。
访问http://technet.microsoft.com/en-us/library/cc731109%28v=ws.10%29.aspx了解详情。
希望这会有所帮助。