我有一个使用 MVC4 构建的面向 Internet 的网站,我偶尔会收到来自机器人或好奇的用户的错误报告,他们会发送不完整 URL 的请求。
例如:
public class ProductController : Controller
{
[HttpGet]
public void View(int id)
{
// ...
- GET 请求
/product/view/1
有效。 - GET 请求
/product/view
无效,因为未指定参数。
此类无效请求会引发类似以下的异常:
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
参数为空并在操作方法中进行检查,但我有许多控制器和许多操作。
我想对任何未能将参数绑定到操作参数的请求返回一个BadRequest
/NotFound
响应,并在代码中的一个位置指定它以应用于所有控制器。
如何才能做到这一点?