2011-10-12 126 views
0

我有一個asp.net應用程序,我需要一個通用路由讓給定的醫學專業路由到給定的頁面,除了我想要路由到不同的頁面。特定URL的ASP.NET路由約束

例如,我想/專科/過敏,/專科/營養所有路線到他們目前的給定頁面。我想不出的部分是我希望URL仍然顯示/專科/泌尿外科,但泌尿科潰瘍到不同的頁面,因爲它本質上變成了它自己的子網站,其他網站不是。

我確定我需要添加一個路由約束,但我似乎無法弄清楚如何實現這一點。

我已經包含了我目前用於一般路線的所有相關代碼。

private static void AddEntityRoute(string name, string url, string path, string dir) 
{ 
((List<string>)HttpContext.Current.Application["RouteList"]).Add(url); 

RouteTable.Routes.Add(name, 
new Route(url, new EntityRouteHandler(path, dir))); 
} 

public class EntityRouteHandler : IRouteHandler 
{ 
    string _virtualPath; 
    private readonly string baseDir; 

    public EntityRouteHandler(string virtualPath, string baseDir) 
    { 
     _virtualPath = virtualPath; 
     this.baseDir = baseDir; 
    } 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     var display = BuildManager.CreateInstanceFromVirtualPath(
         _virtualPath, typeof (Page)) as IEntityDisplay; 

     display.FriendlyURL = baseDir + requestContext.RouteData.Values["name"]; 
     return display; 
    } 
} 

AddEntityRoute("Specialties", "Specialties/{name}", "~/SpecialtyDisplay.aspx", "/Specialties/"); 

回答

1

你正在接近這個錯誤的方式。

如果您的意圖是將一個特定的網址指向不同的控制器/操作,那麼只需添加其他路線。

routes.MapRoute("", "Specialties/Urology", new { controller = "someothercontroller", action = "someotheraction" }); 
routes.MapRoute("", "Specialties/{speciality}", new { controller = "specialities", action = "show" }); 

這裏的「專科/泌尿科」的請求將匹配第一條路線。對「Specialties/Allergy」的請求將與第二個匹配。