在IIS 7托管环境中破解我的头脑:ASP.NET
我正在尝试使用System.Web.Routing实现ASP.NET URL路由。 这似乎在我的本地主机上正常工作,但是当我上线时,我收到IIS 7的404错误(找不到文件)。 仅供参考,主机使用Windows Server 2008 IIS7。
我认为这在处理路由机制方面有所不同。 但我无法弄清楚到底发生了什么。 以下是我到目前为止所做的设置和更改,以使其工作,并给自己一些信誉,它在本地工作绝对正常。
Web.Config设置
然后我有一个system.webserver部分,它具有以下标记
然后在Application_Start部分中,我定义了一条路由,如下所示:
void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } void RegisterRoutes(RouteCollection routes) { routes.Add( "MyRoute", new Route("ProductDetail/{ProductId}/{ProductName}", new MyRouteHandler("~/ProductDetail.aspx"))); }
最后MyRouteHandler看起来如下:
public IHttpHandler GetHttpHandler(RequestContext requestContext) { var display = (Page)BuildManager.CreateInstanceFromVirtualPath( _virtualPath, typeof(Page)); HttpContext.Current.Items["ProductId"] = requestContext.RouteData.Values["Product"]; return display; }
在路由页面上,我抓住产品ID如下
ProductId = (int)HttpContext.Current.Items["Product"];
这是我一团糟的结束。 这在当地很好用。 我已经尝试了一段时间但到目前为止没有成功。
任何帮助都将得到极大的赞赏。
谢谢…
不确定您是否能够找出问题所在…但是如果您仍在寻找解决方案,那么您可以尝试以下方法。 我不得不在一段时间内面对相同的情况,并使用Web配置中的重写规则使用它,您将不需要任何路由机制。 所以首先我建议你删除你可能拥有的任何路由设置和Global.asax文件中的代码。
然后在该部分中,您可以添加如下的重写规则
如果您在理解重写机制时遇到问题,我建议您阅读Scott Guthrie 撰写的这篇文章 。
我认为这应该适用于IIS 7.0或7.5环境。
我遵循了这篇文章: 如何:使用Web表单路由
在我找到它之前,我在共享主机上遇到了问题而在本地没有问题。 这是我的web.config。
我的主机使用IIS 7与集成管道,我错过了这个:
编辑:根据您的设置和代码,唯一剩下的就是检查您是否在web.config中定义了Routing dll,并将其部署到您的bin目录:
在web.config中试试这个。 为我工作。
只是为了告知最终我的解决方案……在IIS7上将管道模式更改为Integrated,然后我在上面的链接中添加了一些关于web.config的行… http://msdn.microsoft.com/en-我们/库/ cc668202.aspx
祝好运。