1

バニティ URL を許可しようとしていますが、入力すると問題が発生します。

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 に答える