asp.net mvc 发布到iis上无法访问资源解决方案
2013-09-24 13:31
597 查看
旧版的IIS只能把那些具有特定扩展名的URL请求发送给ASP.NET框架。比如/SomePage.aspx请求会被映射到ASP.NET框架,而/SomePage.htm则不会被映射到ASP.NET框架。
因此,要想使URL Routing能够正常工作,我们必须要修改默认路由,使其包含文件扩展名,以映射到ASP.NET 框架中去。能够映射到ASP.NET框架中的扩展名有.aspx .axd 和.ashx
修改后的Global.asax文件如下所示
Listing 2 – Global.asax (modified with extensions)
[b]using[/b] System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcAppCS { public class GlobalApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}.aspx/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = ""}// Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } }
注意:在修改完Global.asax文件后要记得重新编译我们的ASP.NET MVC应用程。
在上面的代码中,我们做了一个很小但很重要的修改,我们把默认路由修改为如下格式:
{controller}.aspx/{action}/{id}
由于这种更改,因此ASP.NET MVC应用程路由只能映射下面这种形式了
/Home.aspx/Index
/Product.aspx/Details/3
/Product.aspx
当我们修改完路由表后,我们还要确保程序中的所有超连接的URL地址也都已做相应的修改。换句话说,要保证所有的超链接导航地址中都包含.aspx扩展名。如果我们使用Html.ActionLink()方法生成的超链接,那我们不需要对超链接做更改。
第二种方案
(二)创建Wildcard Script Map
如果我们不想修改ASP.NET MVC应用程序中的URL地址,并且可以访问到Web服务器,那我们可以通过创建wildcard script map方式来把所有请求映射到ASP.NET框架中去。这样就避免修改默认的由表了。
要搞明的一点是,这种修改会使IIS对每个请求都会处理,那怕是请求一张图片、ASP页面、HTML页面。因此使用wildcar script map会使操作更隐式。
启用IIS7.0的wildcard script map
1. 在Connections窗口中选择我们的应用程序
2. 确定选中了Features视图。
3. 双击Handler Mappings按钮。
4. 单击Add Wildcard Script Map,如图。
5. 输入aspnet_isapi.dll文件的路径
6. 在Name文本框中输入MVC
7. 点击OK按钮。
在IIS6.0中创建wildcar script map的步骤:
1、 右击站点,选择属性
2、 选择“Home Directory”选项卡
3、 点击“Configuration”按钮
4、 选择“Mappings”选项卡
5、 点击“Insert”按钮,如下图所示
6、 在Executeable文本框中输入aspnet_isapi.dll文件所在的路径
7、 去掉Verify that file exists复选框前的勾。
8、 点击OK按钮
当我们配置完wildcard script map我们可以使用默认的路由表来处理下面的URL地址
/Home/Index
/Product/Details/3
/Product
总结
这篇文章中我们解释了如何在旧版本(或IIS7.0传统模式下)IIS中使用ASP.NET MVC。我们讨论了两种方式来解决URL Routing与旧版本IIS协同工作问题 :修改默认路由表或创建wildcard script map
第一种方法需要我们修改ASP.NET MVC应用程序,这种做法的好处是,我们不需要操作web服务器,而只是修改一下程序中的路由表即可。
第二种方法是需要我们创建wildcard script map,这种做法的好处是,我们不需要修改我们的代码,但缺点是会影响ASP.NET MVC程序的性能。
此文来自 http://developer.51cto.com/art/200907/137977.htm
相关文章推荐
- Asp.NET MVC 之 调试访问 webservice 时出现“ 无法找到资源 ”的错误
- asp.net MVC发布iis无法加载css,js和图片
- Win7部署asp.net网站,问题逐个突破<一>---Win7 IIS 部署网站,同局域网中电脑无法访问解决方案
- IIS5.1 无法运行asp.net网站但可访问静态页的解决方案
- [转] ASP.NET WEB API程序在VS启动或发布到IIS后启动后发生 - Could not load file or assembly 'System.Web.Http.WebHost’异常,无法正常访问
- ASP.NET MVC在IIS7下发布无法显示的解决办法
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
- ASP.NET Core 2.0 MVC 发布部署--------- IIS 具体操作
- IIS ASP.NET网站部署问题解决: ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。
- ASP.NET发布到IIS后提示”ORA-12154:TNS无法解析指定的连接标识符“
- IIS Temporary ASP.NET Files拒绝访问解决方案(转载)
- 对路径" "的访问被拒绝XP中IIS下asp.net程序错误提示解决方案
- Asp.net MVC P2 中无法正确获取 CheckBox值的bug的解决方案
- 关于IIS上发布asp.net应用程序让外网用户访问问题
- 先装了FRAMEWORK,后装IIS导致asp.net页面无法访问的解决方法
- iis 发布asp.net mvc 网站时候js css 压缩问题,图片不加载问题
- asp.net mvc 发布到IIS测试,路径的引用问题
- 关于asp.net MVC发布后,网站无法读取数据库的问题
- ASP.NET中“访问 IIS 元数据库失败”的解决方案
- asp.net中调用COM组件发布IIS时常见错误 80070005解决方案