【问题标题】:ASP.NET Routing - adding number as constraintASP.NET 路由 - 添加数字作为约束
【发布时间】:2017-09-20 11:49:26
【问题描述】:

我正在尝试在路由中添加 number/int 作为约束。

来源: https://msdn.microsoft.com/en-us/library/cc668201.aspx#adding_constraints_to_routes

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("Product",
        "{ProductName}/{ProductId}",
        "~/Product.aspx",
        false,
        new RouteValueDictionary 
            {{"ProductName", "[a-z]"},{"ProductId", @"^\d+$"}}
       );
}

没关系:example.com/productX/1234

但即使 {ProductId} 不是 number/int,它也会打开 Product.aspx。

所以我不想 example.com/productY/xyz 路由到 Product.aspx。那条路线有什么问题?

第二个问题,{ProductName}中可以有字母、数字和破折号(-),如何将{ProductName}正则表达式改为所有字母、数字和破折号(-)?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    看来您在设置约束时使用了错误的overload。您正在尝试设置defaults 而不是constraints。这应该有效:

    routes.MapPageRoute("Product",
        "{ProductName}/{ProductId}",
        "~/Product.aspx",
        false,
        null,
        new RouteValueDictionary 
            {{"ProductName", "[a-z]"},{"ProductId", @"^\d+$"}}
    );
    

    注意nulldefaults 参数。

    至于ProductName 约束,可以使用@"^[A-Za-z0-9\-]+$"。您的最终代码变为:

    routes.MapPageRoute("Product",
        "{ProductName}/{ProductId}",
        "~/Product.aspx",
        false,
        null,
        new RouteValueDictionary 
            {{"ProductName", @"^[A-Za-z0-9\-]+$"},{"ProductId", @"^\d+$"}}
    );
    

    【讨论】:

      【解决方案2】:

      关于您的第一个问题,请查看:https://stackoverflow.com/a/273144

      第二个:试试@"^[a-zA-Z0-9-]+$"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多