1

私はこれに沿ったURLを持っています:

example.com/profile/publicview?profileKey=5

ルーティングでこれに短縮したい

example.com/profile/5

どうすればよいですか?

これは私の試みです:

routes.MapRoute(
    "Profile", "Profile/{profileKey}", 
    new { controller = "Profile", action = "PublicView", profileKey ="" }
);

しかし、彼はこのエラーを生成します:

パラメータディクショナリには、'Website.Controllers.ProfileController'のメソッド'System.Web.Mvc.ActionResult PublicView(Int32)'のnull許容型ではないタイプ'System.Int32'のパラメータ'profileKey'のnullエントリが含まれています

アクションメソッド

public ActionResult PublicView(int profileKey)
  {
        //stuff
  }
4

4 に答える 4

2

コントローラでPublicView(int?profileKey)を変更します

コメントへの回答

はい。ただし、ルートのデフォルト値はnullであるため、処理する必要があります。それ以外の場合は、ルートのデフォルトを変更します。

多分

これはおそらく役に立たないでしょうが、試してみる価値はあります。これが私のサイトにあるコードです:

        routes.MapRoute(
            "freebies",                                              // Route name
            "freebies/{page}",                           // URL with parameters
            new { controller = "Home", action = "Freebies", page = 1 }  // Parameter defaults
        );

そしてリンク:

http://localhost/freebies/2

そして、これはうまくいきます。

于 2009-08-15T14:06:45.227 に答える
1

example.com/profile/ 5のように、常に整数値をURLに含める場合に限り、ルートとアクションの方法はそのままで問題ありません。(このルートはデフォルトルートの上に定義されていると思います)

定義したのは、URLで指定されていない場合、profileKeyをデフォルトで空の文字列に設定するルートであり、アクションメソッド内で、この値をnull許容でない整数にバインドしようとしたため、例を試している場合.com /profileまたはexample.com/profile/not-an-intこれにより、報告している例外がスローされます。ルートはprofileKeyに空の文字列を割り当てますが、アクションメソッドはこれを整数としてキャストできません。Martinが指摘したように、これを回避する1つの方法は、代わりにnull許容整数を使用することです。別の解決策は、ルートのこの値をデフォルトで整数にすることです。

それでもエラーが発生する場合は、リクエストしている実際のURLが正しく、profileKeyが含まれていることを確認してください。デフォルトのhtmlおよび/またはurlヘルパーを使用しているときに、routeValuesを渡すのを間違えて、リンクをレンダリングしたり、期待していたもの以外のURLに投稿したりすることがあります...

お役に立てば幸い

于 2009-08-15T15:29:42.090 に答える
0

それがあなたの唯一のルートですか?そうでない場合は、別のルート(前に宣言)が最初に一致していて、profileKeyパラメーターを適切に取得していない可能性があります。

于 2009-08-15T14:16:06.200 に答える
0

この(テストされていない)コードを試してください

routes.MapRoute(
    "Profile", "Profile/{profileKey}", 
    new { controller = "Profile", action = "PublicView" }
);
于 2009-08-15T14:31:57.473 に答える