【问题标题】:ASP.NET MVC and IIS 5ASP.NET MVC 和 IIS 5
【发布时间】:2008-09-11 21:30:50
【问题描述】:

在 IIS 5(6 或 7)上托管 ASP.NET MVC 应用程序的最佳方式是什么。当我尝试发布我的 ASP.NET MVC 应用程序时,我似乎得到的只是 404 错误。我做了一些谷歌搜索并找到了几个解决方案,但看起来都不是超级优雅,我担心一旦我开始为应用程序使用共享托管环境,它们是否会无法使用。

Solution 1

  1. 右键单击 inetmgr.exe 上的应用程序虚拟目录。
  2. 属性->虚拟目录选项卡->配置。
  3. 添加新的映射扩展。扩展名应为 .*,即 映射到可执行文件 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll, 或您的适当位置 电脑(你可以简单地复制这个 来自 .aspx 文件的映射)。在 映射取消选中“检查该文件 存在”。
  4. 3 X OK,一切顺利。
  5. 如果需要,您可以将此设置应用于您的所有网站。在 step1、点击“默认网站” 节点而不是你自己的虚拟 目录,然后在步骤 2 中转到 “主目录”选项卡。剩下的就是 一样。

通过 ASP.NET 路由所有内容似乎有点笨拙。

Solutions 2

编辑 MVC 路由以在 URL 中包含 .mvc,然后围绕此扩展执行解决方案 1 中的步骤。 编辑:原始图片链接丢失了,但这里是来自 Google 的缓存:

【问题讨论】:

  • 解决方案 2 无法编译,System.Web.Routing.Route 不包含采用“0”参数的构造函数。

标签: asp.net-mvc iis shared-hosting


【解决方案1】:

答案是here

如果 *.mvc 扩展名未注册 到主机,它会给 404 例外。托管的工作方式 MVC 应用程序在这种情况下是修改 global.asax 中的路由调用 以下方式。

routes.Add(新 Route("{controller}.mvc.aspx/{action}", 新的 MvcRouteHandler()) { 默认值 = 新 RouteValueDictionary (new{ 控制器 = "你的控制器"}) });

这样你所有的控制器 请求将在 *.mvc.aspx 中结束, 这是您的主机认可的。 并且随着 MVC dll 被复制到 您当地的垃圾箱,没有特殊设置 需要为它做。

【讨论】:

  • 这个是在routes.MapRoute("Default","{controller}/{action}/{id}",new { controller = "Home", action = "Index", id = "" }); //?之前还是之后
  • Razor 视图引擎怎么样。这也适用于剃刀视图。
  • 这是否也适用于 IIS6 和 IIS7?或者是 IIS5-MVC 的特定解决方案?
【解决方案2】:

我认为无论哪种方式,您都必须执行解决方案 1

考虑 HTTP 请求管道。

  1. 一个请求进入 IIS。
  2. IIS 检查端口/主机标头以查看它是否设置了一个网站来捕获对该主机标头/端口的请求。
  3. IIS 调查请求的文件扩展名(.php、.asp、.aspx)并将其交给可以处理该类型请求的 ISAPI。

只有此时 ASP.NET(或 PHP 运行时)才会启动。 如果 IIS 没有该映射,那么它永远不会将请求交给 ASP.NET 运行时并且请求永远不会到达您的代码。这就是您需要将 glob (*) 映射到 ASP.NET ISAPI 的原因。

ASP.NET MVC 框架 URL 通常以根本没有文件扩展名结尾。如果您希望这些请求由 ASP.NET(或其他一些运行时)处理,您必须将所有请求映射到该 ISAPI(即 aspnet_isapi.dll),而不管文件扩展名如何。

这通常也适用于需要服务于 .jpg、.gif 等媒体的 HttpHandler。即使 .jpg 不是“正常”的 ASP.NET 文件扩展名,也需要将处理程序映射到您的代码。

HTH,
泰勒

【讨论】:

    【解决方案3】:

    运行: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll -i

    这将为 aspnet 用户重置 IIS 注册表设置。

    创建虚拟目录: 1.在要转换的目录上右击

    • 选择属性
      1. 在目录下,选择创建。
      2. 在配置下,选择添加。
      3. 对于可执行插入:

    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll

    对于扩展插入:.*

    • 取消选中“检查文件是否存在”

    • 在Documents下添加入口点文件,即:Default.htm、index.htm、Global.asax

    • 在目录设置下

      1. 选择编辑...
      2. 选择匿名访问
      3. 取消选中允许 IIS 控制密码
      4. 取消选中基本身份验证
      5. 取消选中集成 Windows 身份验证
      6. 在 ASP.NET 下,确保版本 = v4.0.30319

    注意用户名,即:IUSR_AVSJ82S

    设置物理目录的共享权限:

    • 在 Windows 资源管理器中,转到已转换为虚拟目录的物理目录。 右键目录名
    • 选择属性
    • 在安全选项卡下,选择添加
    • 输入IIS用户名即:IUSR_AVSJ82S点击检查名称。
    • 点击确定
    • 设置读写权限。

    【讨论】:

    • 第一步应该是C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -i
    【解决方案4】:

    仅供参考:在服务器 2003 上(开发一个必须连接到 RPS 的应用程序),它不允许我添加扩展名。*,我使用了修改路由子句的替代解决方案,并且 工作。

    【讨论】:

    • 使用元数据库浏览器,可以在IIS6中添加.*扩展名。从此处microsoft.com/download/en/… 安装 IIS 6.0 工具包。安装后打开并导航左侧面板中的树到 LM > W3SVC > 1 > ROOT > AppName。然后将扩展名编辑为 .*
    【解决方案5】:

    您是否尝试将 .aspx 添加到控制器名称的末尾?

    它适用于 Stack Overflow 问题Where can I get ASP.NET MVC hosting?

    【讨论】:

    • 所以这基本上是解决方案2,不过感谢您指出另一个问题。
    • 非常相似,但如果您使用共享主机,您将无法添加映射扩展。通过添加 aspx,对于运行 3.5 的任何站点,您都应该是金子
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多