MVC4 を使用して構築されたインターネット向けの Web サイトを持っていますが、不完全な URL の要求を送信するボットや好奇心旺盛なユーザーからエラー レポートを受け取ることがあります。
例えば:
public class ProductController : Controller
{
[HttpGet]
public void View(int id)
{
// ...
- へのGETリクエスト
/product/view/1
は有効です。 /product/view
引数が指定されていないため、への GET リクエストは無効です。
このような無効なリクエストは、次のような例外を発生させます。
System.ArgumentException: The parameters dictionary contains a null entry
for parameter 'id' of non-nullable type 'System.Int32' for method
'System.Web.Mvc.ActionResult View(Int32)' in 'Foo.ProductController'. An
optional parameter must be a reference type, a nullable type, or be declared
as an optional parameter.
Parameter name: parameters
at System.Web.Mvc.ActionDescriptor.ExtractParameterFromDictionary(ParameterInfo parameterInfo, IDictionary`2 parameters, MethodInfo methodInfo)
at System.Web.Mvc.ReflectedActionDescriptor.<>c__DisplayClass1.<Execute>b__0(ParameterInfo parameterInfo)
...
例外メッセージが示すように、id
引数を null 可能にして、アクション メソッド内でチェックすることはできましたが、多くのアクションを持つ多くのコントローラーがあります。
BadRequest
引数をアクション パラメーターにバインドできなかったリクエストに対して/レスポンスを返し、NotFound
これをコード内の 1 か所で指定して、すべてのコントローラーに適用したいと考えています。
これはどのように行うことができますか?