在IIS 5(6或7)上托管ASP.NET MVC应用程序的最佳方法是什么。当我尝试发布我的ASP.NET MVC应用程序时,我似乎得到的只是404错误。我已经做了一些googleing并找到了几个解决方案,但似乎都不是超级优雅的,我担心一旦我为应用程序使用共享托管环境它们将无法使用。
- 右键单击inetmgr.exe上的应用程序虚拟目录。
- 属性 - >虚拟目录标签 - >配置。
- 添加新的映射扩展程序。扩展名应为。*,即 映射到可执行文件 C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ ASPNET_ISAPI.DLL, 或者你的适当位置 电脑(你可以简单地复制一下 从.aspx文件的映射)。上 映射取消选中“检查该文件 存在”。
- 3 X好,你很高兴。
- 如果需要,您可以将此设置应用于您的所有网站。在 第1步,点击“默认网站” 节点而不是你自己的虚拟 目录,并在步骤2中转到 “主目录”选项卡。其余的是 相同。
醇>
通过ASP.NET路由一切似乎有点麻烦。
编辑MVC路由以在URL中包含.mvc,然后根据此扩展按照解决方案1中的步骤操作。 编辑:原始图片链接已丢失,但此处来自Google的缓存:
答案 0 :(得分:13)
答案是here
如果未注册* .mvc扩展名 到托管,它将给404 例外。托管的工作方式 在这种情况下MVC应用程序是修改 global.asax路由中的caluse 以下方式。
routes.Add(新 路线( “{}控制器.mvc.aspx / {动作}”, new MvcRouteHandler()){ Defaults = new RouteValueDictionary(new {controller =“YourController”})});
通过这种方式你所有的控制器 请求将以* .mvc.aspx结尾, 这是您的托管认可。 并且当MVC dll被复制到 你当地的垃圾箱,没有特别的安排 需要为此完成。
答案 1 :(得分:8)
我认为无论哪种方式,你都必须做解决方案1 。
考虑HTTP请求管道。
只有在这一点上,ASP.NET(或PHP运行时)才会启动。如果IIS没有该映射,那么它永远不会将请求移交给ASP.NET运行时并且请求永远不会到达您的代码。这就是为什么你需要将glob(*)映射到ASP.NET ISAPI的原因。
ASP.NET MVC框架网址通常没有文件扩展名结尾。如果您希望ASP.NET(或其他某些运行时)处理这些请求,则必须将所有请求映射到该ISAPI(即aspnet_isapi.dll),而不管文件扩展名如何。
这通常也适用于需要提供.jpg,.gif等媒体的HttpHandler。对于要处理的处理程序,它需要映射到您的代码,即使.jpg不是“普通”ASP.NET文件扩展名。
HTH,
泰勒
答案 2 :(得分:3)
执行命令 C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll -i
这将重置aspnet用户的IIS注册表设置。
创建虚拟目录: 1.右键单击要转换的目录
C:\ Windows \ Microsoft.NET \框架\ v4.0.30319 \ ASPNET_ISAPI.DLL
对于扩展插入:。*
取消选中“检查该文件是否存在”
添加入口点文件,即:Default.htm,index.htm,Global.asax
注意用户名即:IUSR_AVSJ82S
设置物理目录的共享权限:
答案 3 :(得分:1)
您是否尝试将.aspx添加到控制器名称的末尾?
适用于Stack Overflow问题 Where can I get ASP.NET MVC hosting? 。
答案 4 :(得分:1)
仅供参考:在服务器2003上(开发一个必须连接到RPS的应用程序),它没有'允许我添加扩展名。*,我使用修改路由子句的替代解决方案,并且 工作