1

我正在尝试允许 Vanity Urls,但我遇到了一个问题,如果我输入

XXXX/User/Profile/Test

代替

xxxx/User/Profile/224

它无法读取字符串。

我当前的 ActionResult 如下:

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。

我也一直在尝试使用 2 个操作结果,如下所示:

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 时,它会向我抛出 AmbiguousMatchException 错误。

这就是 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" }
        );
4

1 回答 1

1

我想你快到了。尝试为 id设置约束:

new { ID = @"\d+" }

这将保证,如果您尝试访问 XXXX/User/Profile/Test,您的操作不会被命中,因为 Test 并不是真正的 id。

于 2012-06-01T10:25:07.230 回答