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

解决方案1

  1. 右键单击 inetmgr.exe 上的应用程序虚拟目录。
  2. 属性->虚拟目录选项卡->配置。
  3. 添加新的映射扩展。扩展程序应为。 .aspx文件)。在映射上取消选中“检查文件存在”。
  4. 3 X 好的,您就可以开始了。
  5. 如果需要,您可以将此设置应用到您的所有网站。在步骤1中,单击“默认网站”节点,而不是您自己的虚拟目录,然后在步骤2中转到“主目录”选项卡。其余的是相同的。

通过 ASP.NET 路由所有内容似乎有点老套。

解决方案2

编辑 MVC 路由以在 URL 中包含 .mvc,然后按照基于此扩展的解决方案 1 中的步骤进行操作。 编辑:原始图像链接丢失了,但它来自谷歌的缓存:

alt text

有帮助吗?

解决方案

答案是 这里

如果 *.mvc扩展名未注册到托管,则将给出404个例外。在这种情况下,托管MVC应用程序的工作方式是通过以下方式修改Global.asax路由Caluse。

rutes.add(新路由(“ {controller} .mvc.aspx/{action}”,new mvcroutehandler()){defaults = new RoutevalueDictionary(new {new {Controller =“ YourController”})});

这样,您的所有控制器请求将最终出现在 *.mvc.aspx中,这是您的托管所识别的。而且,由于MVC DLL被复制到您的本地垃圾箱中,因此无需为此进行特殊的设置。

其他提示

我认为 无论哪种方式,你都必须执行解决方案 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 文件扩展名,它也需要映射到您的代码。

哈特哈,
泰勒

跑步: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

对于扩展插件:.*

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

  • 在文档下添加入口点文件,即:默认.htm、index.htm、Global.asax

  • 在目录设置下

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

记下用户名,即:IUSR_AVSJ82S

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

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

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

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

它适用于 Stack Overflow 问题 在哪里可以获得 ASP.NET MVC 托管?.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top