当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET MVC和IIS 5

如何解决《ASP.NETMVC和IIS5》经验,为你挑选了2个好方法。

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

解决方案1

    右键单击inetmgr.exe上的应用程序虚拟目录.

    属性 - >虚拟目录选项卡 - >配置.

    添加新的映射扩展.扩展名应为.*,它将映射到可执行文件C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,或者计算机上的相应位置(您只需将其映射到映射中即可) .aspx文件).在映射上取消选中"检查该文件是否存在".

    3 X好,你很高兴.

    如果需要,可以将此设置应用于所有网站.在步骤1中,单击"默认网站"节点而不是您自己的虚拟目录,然后在步骤2中转到"主目录"选项卡.其余的都是一样的.

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

解决方案2

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

替代文字



1> Dan..:

答案在这里

如果*.mvc扩展名未注册到主机,则会给出404异常.在这种情况下托管MVC应用程序的工作方式是以下列方式修改global.asax路由caluse.

routes.Add(new Route("{controller} .mvc.aspx/{action}",new MvcRouteHandler()){Defaults = new RouteValueDictionary(new {controller ="YourController"})});

这样,您的所有控制器请求都将以*.mvc.aspx结尾,您的主机可以识别该请求.并且当MVC dll被复制到您的本地bin中时,不需要为它进行特殊设置.


这是在`routes.MapRoute("Default","{controller}/{action}/{id}",new {controller ="Home",action ="Index",id =""})之前或之后; //?`
怎么样Razor视图引擎.这也适用于剃刀视图.

2> Tyler..:

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

HTH,
泰勒

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有