Asp.net mvc 3 虚荣Url,读取输入的字符串而不是int

Asp.net mvc 3 虚荣Url,读取输入的字符串而不是int,asp.net-mvc-3,routing,actionresult,Asp.net Mvc 3,Routing,Actionresult,我试图允许虚荣的网址,但我遇到的问题,如果我进入 XXXX/User/Profile/Test 而不是 xxxx/User/Profile/224 它无法读取字符串 我目前的行动结果如下: public ActionResult Profile(int ID = -1, string VanityID = null) { if (VanityID == null) { ppUser viewerChoice = DB.ppUse

我试图允许虚荣的网址,但我遇到的问题,如果我进入

XXXX/User/Profile/Test
而不是

xxxx/User/Profile/224
它无法读取字符串

我目前的行动结果如下:

public ActionResult Profile(int ID = -1, string VanityID = null)
    {
        if (VanityID == null)
        {
            ppUser viewerChoice = DB.ppUser_GetUserByPersonID(ID);
            return View(viewerChoice);
        }
        else
        {
            ppUser viewerChoice = DB.ppUser_GetUserByVanityID(VanityID);
            return View(viewerChoice);
        }
    }
如果在URL中输入int,它将接收int Id,但如果输入字符串,则不会接收任何内容,并且会抛出错误,因为该Id被读取为-1

我还尝试使用以下两个动作结果:

public ActionResult Profile(int ID)
    {
            ppUser viewerChoice = DB.ppUser_GetUserByPersonID(ID);
            return View(viewerChoice);
    }

    public ActionResult Profile(string ID)
    {
        ppUser viewerChoice = DB.ppUser_GetUserByVanityID(ID);
        return View(viewerChoice);
    }
但当我试图调用ActionResult时,它向我抛出了一个模糊的MatchException错误

这是routes.Maproute,如果有帮助的话

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
            new { controller = @"[^\.]*" }, // Parameter constraints
            new string[] { typeof(MvcApplication).Namespace + ".Controllers" }
        );

我想你就快到了。请尝试输入id:

new { ID = @"\d+" }

这将保证,如果您尝试访问XXXX/User/Profile/Test,您的操作不会被击中,因为Test实际上不是一个id。

我想您就快到了。请尝试输入id:

new { ID = @"\d+" }

这将保证,如果您尝试访问XXXX/User/Profile/Test,您的操作不会被击中,因为Test实际上不是一个id。

我建议您创建两个单独的路由(带有约束)。一个接受{id}并验证它是整数的函数,另一个接受{name}并验证它是字符串的函数。然后,您的分区操作将是string Name而不是string ID。我建议您创建两个独立的路由(带有约束)。一个接受{id}并验证它是整数的函数,另一个接受{name}并验证它是字符串的函数。那么您的节操作将是字符串名称而不是字符串ID。