1

我必须处理旧的 asp.net mvc web 应用程序(.net 4)。它使用一些自定义路由,当我使用 Visual Studio 2010 的开发服务器时效果很好。但是,当我改用 iis 时(在调试期间),它似乎不起作用(以前在调试期间从未使用过 iis)。

这里提供的答案似乎没有帮助。我已经使用:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

路由可能无法正常工作还有其他原因吗?谢谢!

4

1 回答 1

4

一个通用的帖子,不幸的是,互联网信息系统会产生大量的配置问题。这很可能是它最大的陷阱。当您在部署服务器、本地服务器或生产服务器上启动它时,结果可能永远不会相同。

我将使用互联网信息系统六,因为它类似于七和八,只是缺少某些功能。

在您的ASP.NET MVC Web 应用程序项目中,您需要右键单击您的项目并选择Properties

您应该会看到一个指示单词的选项卡:*Web**

  • 在此选项卡的底部,您需要确保选中使用 IIS Web 服务器
  • 您需要在其中放置一个项目 URL

该字段应如下所示:*http://localhost/ApplicationName*. 您在这里所做的基本上是为 IIS 映射您的项目目录。您会看到每个 IIS 站点都在以下位置存储了一个站点:

C:\inetpub\wwwroot

那是您的根站点文件夹,IIS 将在其中引用您的所有站点组件。** 请记住,项目中的这个虚拟目录实际上与列出的 IIS 配置项不同。**

现在您要打开 Internet 信息系统,您要设置文件扩展名。因此,在 IIS 中执行任何操作之前,您需要配置ASP.NET MVC Installer。您需要将 .mvc 扩展名的映射 (ISAPI) 配置为aspnet_isapi.dll. 为了让 IIS 将使用 .mvc 扩展名的路由请求传递给 ASP.NET,此步骤是必需的。

从一篇很好的博客文章中,他说:

如果您打算使用无扩展名 URL,则可以跳过本节,但无论如何阅读它可能会很有用,因为它包含一些您在设置无扩展名 URL 时需要了解的信息。将 .mvc 映射到 ASP.NET

如果您计划使用 .mvc URL 扩展,并且要在未安装 ASP.NET MVC 的计算机上部署到 IIS 6,则需要通过执行以下步骤来创建此映射。

使用 .aspx 扩展名而不是 .mvc 的一个好处是您不必担心映射 .aspx 扩展名。假设您在机器上正确安装了 ASP.NET,它应该已经被映射。

对于其他人,首先右键单击虚拟应用程序节点(在本例中为 IIS6DemoWeb)并选择属性。您应该看到以下对话框。

列出的对话框

确保您在虚拟目录选项卡中并选择配置。这将允许更改根网站。这应该会打开您的应用程序配置对话框。这将允许您物理映射您的应用程序。由于您使用.mvc的是您将选择的内容。

如果.mvc未在列表中找到,您可以在此处指向数据链接库:

c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

现在,在您运行应用程序之前,您需要更新默认路由,以便它们查找正确的文件扩展名。在你的Global.asax.cs你会想要确保你使用的.mvc扩展。

您将实现一个方法,例如:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{id}",
    new { action = "Index", id = "" }
  );

  routes.MapRoute(
    "Root",
    "",
    new { controller = "Home", action = "Index", id = "" }
  );

}

这应该允许网站正确显示。这是一个非常非常通用和广泛的例子。但希望这能为您指明一个好的方向。


更新:

在使用互联网信息系统七时,您必须注意以下事项:

  • 站点配置
  • 应用程序池
  • 数据库配置

这三个项目是错误配置的常见罪魁祸首。

一个非常棒的博客可以在这里找到:另一篇不错的文章可以在这里找到:

但是,这篇文章应该直击你的头

正如我所说,上述细节应该可以解决您的问题。但是,随着 IIS 7 的引入,它们有两种完全不同的方法来允许请求:集成经典

主要区别在于集成将表现更好并包含更多功能。Classic是为向后兼容而设计的您的路由请求处理方法由您的Application Pool确定。配置不正确;它行不通。

  1. 启动 Internet 信息服务管理器
  2. 在 Connections 窗口中,选择一个应用程序
  3. 在“操作”窗口中,单击“基本设置”链接以打开“编辑应用程序”对话框
  4. 记下所选的应用程序池。

默认情况下,IIS 配置为支持两个应用程序池:DefaultAppPool 和 Classic .NET AppPool。如果选择了 DefaultAppPool,那么您的应用程序将在集成请求处理模式下运行。如果选择 Classic .NET AppPool,则您的应用程序将以经典请求处理模式运行。

编辑应用程序池 图 1.1

在该框中,您将能够在“编辑应用程序对话框”中修改处理模式。

希望这些附加信息能更好地帮助您实现目标。前两个博客是避免 IIS,第三个专门关注 IIS 7。如果您有任何问题,请告诉我。

于 2013-02-25T19:54:41.443 回答