ASP.NET MVC中的操作参数类型验证

时间:2019-04-08 15:08:11

标签: c# asp.net-mvc post get

我有一个Action方法在控制器中接受 long 值:

public virtual ActionResult GetInfo(long Id)

如果有人劫持了POST / GET请求(例如,将 GetInfo?Id = 23 更改为 GetInfo?Id = THIS_IS_A_STRING ),则响应将包含错误的堆栈跟踪。

如何避免这种情况?如何通过控制器拦截错误的参数并将用户重定向到另一个页面?

1 个答案:

答案 0 :(得分:0)

我要做的第一件事是将自定义错误处理程序添加到web.comfig。像这样:

<system.web>
   <customErrors mode="On" defaultRedirect="~/ErrorHandler/Index">
     <error statusCode="404" redirect="~/ErrorHandler/NotFound"/>
   </customErrors>
<system.web/>`

这将处理您错过的所有错误,并避免向用户显示系统错误消息。

接下来,我将使用MVC控制器OnException自定义错误响应。

public class UserMvcController : Controller
   {
      protected override void OnException(ExceptionContext filterContext)
      {
         filterContext.ExceptionHandled = true;

         //Log the error!!
         _Logger.Error(filterContext.Exception);

         //Redirect
         filterContext.Result = RedirectToAction("Index", "ErrorHandler");
         {
            ViewName = "~/Views/ErrorHandler/Index.cshtml"
         };
      }
   }