2

各ユーザーが他のユーザーと共有できる独自のプロファイルを持つ ASP.net でアプリケーションを作成しています。

プロファイルのデフォルトのアドレスは次のとおりです。

www.domain.com/User/Profile/[UserID]

バニティ URL を指定すると、誰かが入力できます

www.domain.com/User/Profile/[Vanity]

同じページに誘導されます。プロファイル ページは、コントローラーで次の関数を使用して UserID を取得する 1 つの関数のみで動作します。

    public ActionResult Profile(int id)
    {
        ppUser viewerChoice = DB.User_GetUserByPersonID(id);

        return View(viewerChoice);
    }

ただし、文字列を取る別のものを追加すると

    public ActionResult Profile(string vanity)
    {
        ppUser viewerChoice = DB.User_GetUserByVanity(vanity);

        return View(viewerChoice);
    }

これにより、AmbiguousMatch 例外が発生します。正しい関数を呼び出すことを確認するにはどうすればよいですか?

4

1 に答える 1

2

選択肢はほとんどありません。

  • 文字列パラメータのみをキャプチャして読み取り、数値の場合はintに変換できます。
  • 2つの別々のルートを構成し、正規表現を使用してパラメーターを認識し、それに応じて処理することができます
  • intパラメータとstringパラメータに別々のアクションを使用します。

ユーザーがバニティURLにint(ユーザーIDと同じ形式)を選択するリスクがあるため、アプローチ(同じアクション、異なるパラメーター)には細心の注意を払っています。そのような対立をどのように解決しますか?

于 2012-05-31T13:43:55.550 に答える