ASP.NET MVC 和 IIS 5
-
09-06-2019 - |
题
让 ASP.NET MVC 应用程序托管在 IIS 5(6 或 7)上运行的最佳方法是什么?当我尝试发布 ASP.NET MVC 应用程序时,我收到的似乎只是 404 错误。我做了一些谷歌搜索并找到了一些解决方案,但看起来都不是超级优雅,而且我担心一旦我开始为应用程序使用共享托管环境,它们是否将无法使用。
- 右键单击 inetmgr.exe 上的应用程序虚拟目录。
- 属性->虚拟目录选项卡->配置。
- 添加新的映射扩展。扩展程序应为。 .aspx文件)。在映射上取消选中“检查文件存在”。
- 3 X 好的,您就可以开始了。
- 如果需要,您可以将此设置应用到您的所有网站。在步骤1中,单击“默认网站”节点,而不是您自己的虚拟目录,然后在步骤2中转到“主目录”选项卡。其余的是相同的。
通过 ASP.NET 路由所有内容似乎有点老套。
编辑 MVC 路由以在 URL 中包含 .mvc,然后按照基于此扩展的解决方案 1 中的步骤进行操作。 编辑:原始图像链接丢失了,但它来自谷歌的缓存:
解决方案
答案是 这里
如果 *.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 请求管道。
- 请求进入 IIS。
- IIS 检查端口/主机标头以查看其是否设置了一个网站来捕获对该主机标头/端口的请求。
- 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.右键单击要转换的目录
- 选择属性
- 在“目录”下,选择“创建”。
- 在“配置”下,选择“添加”。
- 对于可执行插入:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
对于扩展插件:.*
取消选中“检查文件是否存在”
在文档下添加入口点文件,即:默认.htm、index.htm、Global.asax
在目录设置下
- 选择编辑...
- 选择匿名访问
- 取消选中允许 IIS 控制密码
- 取消选中基本身份验证
- 取消选中集成 Windows 身份验证
- 在 ASP.NET 下,确保版本 = v4.0.30319
记下用户名,即:IUSR_AVSJ82S
设置物理目录的共享权限:
- 在 Windows 资源管理器中,转到已转换为虚拟目录的物理目录。右键单击目录名称
- 选择属性
- 在安全选项卡下,选择添加
- 输入 IIS 用户名,即:IUSR_AVSJ82S 单击检查名称。
- 单击“确定”
- 将权限设置为读取和写入。
仅供参考:在Server 2003上(开发一个必须连接到RPS的应用程序),它不允许我添加扩展名。*,我使用了修改路由子句的替代解决方案,并且有效。
您是否尝试过将 .aspx 添加到控制器名称的末尾?
它适用于 Stack Overflow 问题 在哪里可以获得 ASP.NET MVC 托管?.