ASP.. NET特定URL的路由约束
本文关键字:路由 约束 URL NET 特定 ASP | 更新日期: 2023-09-27 18:11:17
我有一个asp.net应用程序,我需要有一个一般路由给定的医学专业路由到一个给定的页面,除了一个我想路由到不同的页面。
例如,我想要/Specialties/Allergy,/Specialties/Nutrition所有的路由到一个给定的页面,就像他们目前做的那样。我不明白的部分是,我希望URL仍然显示/Specialties/Urology,但将泌尿学路由到另一个页面,因为它实质上成为了它自己的子网站,而其他的都不是。
我确信我需要添加一个路由约束,但我似乎不知道如何实现这一点。
我已经包含了我目前在通用路由中使用的所有相关代码。
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/");
你想错了。
如果你的目的是将一个特定的url指向不同的控制器/操作,那么只需添加另一个路由。
routes.MapRoute("", "Specialties/Urology", new { controller = "someothercontroller", action = "someotheraction" });
routes.MapRoute("", "Specialties/{speciality}", new { controller = "specialities", action = "show" });
在这里,对"专科/泌尿科"的请求将匹配第一条路由。对"专科/过敏"的请求将匹配第二个。