いくつかのアクションを持つコントローラー(製品)があり、必須パラメーター(編集、詳細、履歴)があるものと、null許容パラメーター(作成、検索)があるものがあります。オプションパラメータを使用したデフォルトルートはすべてのアクションにルーティングされますが、ユーザーが必須パラメータ(Product / History)を使用してコントローラ/アクションを指すURLを入力すると、エラーがスローされます。これを処理するのに最適な場所はどこですか?するべきか:
必須のURLパラメーターを持つものとして必須のwithパラメーターを持つアクションのルートを定義しますか?
routes.MapRoute(
name: "ProductParamRequired",
url: "Product/History/{id}",
defaults: new { controller = "Product", action = "History"}
);
アクションを変更してオプションのパラメーターを設定し、不正な要求を返します。
public ActionResult History(int? id)
{
if (id == null)
{
throw new HttpException(400, "BadRequest");
}
アプリケーションに500の内部サーバーエラーをスローさせ、それを(もちろんカスタマイズされたエラーページ)ユーザーに表示させますか?
ありがとう、そしてハッピーフライデー!
必要な場合は、絶対にルートの一部として必要にしてください。リクエストに期待するデータさえ含まれていない場合は、それを処理するという考えを楽しまないでください。アプリケーションのエッジで検証するのではなく、アプリケーションに入力した不良データを修正する方がはるかにコストがかかります。常にできるだけ早く入力を検証してください。
2
すべてのアクションと必要なすべてのパラメーターに対してこのパターンを複製することになるため、これは良い考えではありません。
3
データを検証しようとさえしていないので、これは良い考えではありません。それはいつもトラブルを求めています。
1
おそらくデフォルトルートのproduct/history
。にフォールバックするため、問題ありません。
余談ですが、属性ルーティングを利用RouteConfig
すると、ルートを明示的に定義するときに、膨大な量のメンテナンスを行うことができなくなります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加