ASP.NET路由所有页面

时间:2013-10-08 14:18:09

标签: asp.net webforms url-routing asp.net-routing webforms-routing

我有一个路由配置文件,我正在尝试路由所有遵循公式.com / {a page} / {a subpage}的网址,以路由到特定页面.com / Default / Page.aspx。我的问题是它为所有页面执行此操作(即.com / Account / Login.aspx。有没有办法指定我希望它仅在用户将其键入地址栏时才能路由到该页面,可能只有当他们省略.aspx扩展名时?这是我到目前为止所做的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.Membership.OpenAuth;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;

namespace CouponsForGiving
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.Ignore("{resource}.axd/{*pathInfo}");
            routes.MapPageRoute("LearnMore", "LearnMore", "~/LearnMore.aspx");
            routes.MapPageRoute("DefaultPage", "{nponame}", "~/Default/NPOPage.aspx");
            routes.MapPageRoute("CampaignPage", "{nponame}/{campaignname}", "~/Default/CampaignPage.aspx"); //This one routes a lot of other pages
            routes.EnableFriendlyUrls();
        }
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

这里的问题是覆盖路线。如果有2条路由具有相同数量的参数,并且如果没有硬编码值,则始终会考虑声明的第一条路径。例如,如果注册了以下2条路线,

routeCollection.MapPageRoute("LearnMore", "{param1}/{param2}", "~/About.aspx");
routeCollection.MapPageRoute("DefaultPage", "{param3}/{param4}", "~/Account/Login.aspx");

在上述情况下,路线LearnMore将被视为有效,它将请求About.aspx页面。

您可以执行以下操作:

routeCollection.MapPageRoute("LearnMore", "learnmore/{param1}/{param2}", "~/About.aspx");
routeCollection.MapPageRoute("DefaultPage", "default/{param3}/{param4}", "~/Account/Login.aspx");

这将重定向到相应的页面。您可以浏览以下URL以获取有关URL路由的更多详细信息。

http://karmic-development.blogspot.in/2013/10/url-routing-in-aspnet-web-forms-part-2.html

谢谢&问候, Munjal