我使用以下路径在ASP.NET 4.0中实现了URL路由。
routes.MapPageRoute(
"NewsDetails", // Route name
"news/{i}/{*n}", // Route URL
"~/newsdetails.aspx" // Web page to handle route
);
给我的网址像
http://www.mysie.com/news/1/this-is-test-news
这在我的localhost工作正常。
但是当我把它上传到服务器上时它会给出......
Server Error
404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed,
or is temporarily unavailable.
如果我尝试http://www.mysie.com/news/1/this-is-test-news.aspx,则显示页面。
有没有人有同样的问题?
如何设置网址 http://www.mysie.com/news/1/this-is-test-news可以在Windows Server 2008上运行吗?
答案 0 :(得分:33)
使用IIS 7.5启用默认的ASP.Net 4.0路由:
web.config
醇>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule"/>
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</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>
3。在global.asax
文件中创建路由
注意:您必须将应用程序池设置为 Asp.net 4.0应用程序池,因为路由无法与 Asp.net 4.0 Classic Application池一起使用。 强>
希望这会有所帮助。
答案 1 :(得分:1)
我已阅读了您的所有食谱,但我的网站( ASP.NET 4.0 + VS2010 + Cassini )仍未正确路由。
我网站的虚拟路径是“CompanyName.ApplicationName.Web”。我将此虚拟更改为“MyApplicationName”并瞧!
更改Cassini的虚拟路径配置:
答案 2 :(得分:1)
我的解决方案,在尝试了一切之后:
部署不当,旧的 PrecompiledApp.config 挂在我的部署位置,并使一切都无法正常工作。
我的最终设置有效:
web.config中没有任何变化 - 这意味着没有用于路由的特殊处理程序。这是我很多其他帖子参考的部分的快照。我正在使用FluorineFX,所以我确实添加了该处理程序,但我不需要任何其他程序:
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="None"/>
<pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
<httpRuntime requestPathInvalidCharacters=""/>
<httpModules>
<add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
</httpModules>
</system.web>
<system.webServer>
<!-- Modules for IIS 7.0 Integrated mode -->
<modules>
<add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" />
</modules>
<!-- Disable detection of IIS 6.0 / Classic mode ASP.NET configuration -->
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
Global.ashx :(只有任何注释的方法)
void Application_Start(object sender, EventArgs e) {
// Register routes...
System.Web.Routing.Route echoRoute = new System.Web.Routing.Route(
"{*message}",
//the default value for the message
new System.Web.Routing.RouteValueDictionary() { { "message", "" } },
//any regular expression restrictions (i.e. @"[^\d].{4,}" means "does not start with number, at least 4 chars
new System.Web.Routing.RouteValueDictionary() { { "message", @"[^\d].{4,}" } },
new TestRoute.Handlers.PassthroughRouteHandler()
);
System.Web.Routing.RouteTable.Routes.Add(echoRoute);
}
PassthroughRouteHandler.cs - 这实现了从http://andrew.arace.info/stackoverflow到http://andrew.arace.info/#stackoverflow的自动转换,然后由default.aspx处理:
public class PassthroughRouteHandler : IRouteHandler {
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"];
requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true);
return null;
}
}