ASP.NET MVC和IIS 5

时间:2008-09-11 21:30:51

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

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

Solution 1

  
      
  1. 右键单击inetmgr.exe上的应用程序虚拟目录。
  2.   
  3. 属性 - >虚拟目录标签 - >配置。
  4.   
  5. 添加新的映射扩展程序。扩展名应为。*,即   映射到可执行文件   C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ ASPNET_ISAPI.DLL,   或者你的适当位置   电脑(你可以简单地复制一下   从.aspx文件的映射)。上   映射取消选中“检查该文件   存在”。
  6.   
  7. 3 X好,你很高兴。
  8.   
  9. 如果需要,您可以将此设置应用于您的所有网站。在   第1步,点击“默认网站”   节点而不是你自己的虚拟   目录,并在步骤2中转到   “主目录”选项卡。其余的是   相同。
  10.   

通过ASP.NET路由一切似乎有点麻烦。

Solutions 2

编辑MVC路由以在URL中包含.mvc,然后根据此扩展按照解决方案1中的步骤操作。 编辑:原始图片链接已丢失,但此处来自Google的缓存:

alt text

5 个答案:

答案 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请求管道。

  1. 请求进入IIS。
  2. IIS检查端口/主机标头,看它是否设置了一个网站来捕获对该主机标头/端口的请求。
  3. IIS调查请求的文件扩展名(.php,.asp,.aspx),并将其交给可处理该类请求的ISAPI。
  4. 只有在这一点上,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.右键单击要转换的目录

  • 选择“属性”
      <目录下的
    1. ,选择“创建”。
    2. 在配置下
    3. ,选择添加。
    4. for Executable insert:

C:\ Windows \ Microsoft.NET \框架\ v4.0.30319 \ ASPNET_ISAPI.DLL

对于扩展插入:。*

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

  • 文档下的
  • 添加入口点文件,即: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点击检查名称。
  • 点击确定
  • 设置读取和写入权限。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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