为从RouteBase继承的Route添加约束

时间:2014-05-04 08:58:15

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-5

是否可以为从RouteBase继承的自定义路由添加约束?

我的路线看起来像这样:

public class PageRoute : RouteBase {

public override RouteData GetRouteData(HttpContextBase httpContext)
{
    var path = httpContext.Request.Path;
    if (path.Contains("api") || path.Contains("ui"))
    {
        return null;
    }

我认为这看起来有点阴暗,我想注册我的路线并说,如果网址包含apiui,请不要试图尝试这条路线。这可能吗?

1 个答案:

答案 0 :(得分:0)

一些注意事项:  1.如果要仅指定约束,则希望从Route而不是RouteBase派生。约束在Route类中引入。  2.像你一样指定约束(在GetRouteData中显式)它没有任何问题,它只是不可扩展。  3. path.Containts(“api”)不是一个非常好的约束,同样不是带有“ui”的约束,它会因为几个原因而失败(不区分大小写和像“maping”这样的字符串会使它失败)。

所以你想考虑一下:

var segments = path.Split(new[] { '/' });
segments.Any(segment => segment.Equals("api", StringComparison.OrdinalIgnoreCase) ||
             segment.Equals("ui", StringComparison.OrdinalIgnoreCase));