我试图实现使用System.Web.Routing ASP.NET URL路由。 这似乎很好地工作在我的本地但是当我去住我得到一个IIS(未找到文件)7的404错误。 FYI的主机使用Windows Server 2008的IIS7。
我认为这是使在处理路由机制存在差异。 但我无法弄清楚究竟什么发生。 下面是我做了迄今为止得到它的工作,并给予一定的信用,以自己这本地工作绝对没问题的设置和更改。
web.config设置
然后,我有一个具有以下标记一个system.webserver节
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule,
System.Web.Routing, Version=3.5.0.0,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</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"];
这是我惹的结束。 这在当地正常工作。 我一直在想这一段时间,但至今没有成功。
任何帮助将十分赞赏。
谢谢...