2016-07-02 13 views
1

が、私はこのルートを持っている必要作り細部へのid 123が利用可能にする mysite.com/place/details/123ASP.NET MVCのルートIDパラメータが

場所コントローラーのアクション - 場所 '123'を検索できます。 -

ただし、このURLは、コントローラに渡されます。

が、私はこれがHttpNotFoundを返すようにしたい mysite.com/place/details/ - それは、コントローラにはnull IDを送信する - と処理するために私を必要としそれ。

コントローラ自体に不公平なヌルチェックを必要とするのではなく、ルート自体がこれを達成すれば、それはうまくできません。

私はこの特定の問題についてGoogleに何も見つかりませんでした。

どうすればいいですか?

+0

参考のために、私は属性ルーティングを使用しています。より多くのコントロールを行うことができます。 – niico

答えて

5

id値が必要なようにするにはliek変更することができますUrlParameter.Optionalまたは他のデフォルト値を指定してください。 URLセグメントに値がなく、デフォルトがない場合、ルートは要求と一致しません。

しかし、そうしてはならない場合には、ルートが別の方法で一致しないようにする必要があります。

routes.MapRoute(
    "PlaceDetails", 
    "Place/{action}/{id}", 
    new { controller = "Place", action = "Details" } 
); 

詳細および追加オプションについては、Why map special routes first before common routes in asp.net mvc?を参照してください。

2

は今

routes.MapRoute(
     "PlaceDetails", 
     "{controller}/{action}/{id}", 
     new { controller = "Place", action = "Details"} 
    ); 

mysite.com/place/details/がルートとは一致しませんデフォルトでidプレースホルダのためのオプションを削除します。他のデフォルト経路がマップされていない場合に限ります。上記のあなたのルーティングとの競合が発生した場合

あなたはとしてそれを設定してはいけません、それはこれが

routes.MapRoute(
     "PlaceDetails", 
     "Place/Details/{id}", 
     new { controller = "Place", action = "Details"} 
    ); 

たカップルこのマッピング直接アクションPlaceController.Details