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/");

ASP.. NET特定URL的路由约束

你想错了。

如果你的目的是将一个特定的url指向不同的控制器/操作,那么只需添加另一个路由。

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

在这里,对"专科/泌尿科"的请求将匹配第一条路由。对"专科/过敏"的请求将匹配第二个。