首页 > 解决方案 > ASP.NET MVC 中的操作参数类型验证

问题描述

我的控制器中有一个接受长值的 Action 方法:

public virtual ActionResult GetInfo(long Id)

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

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

标签: c#asp.net-mvcpostget

解决方案


我要做的第一件事是向 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"
         };
      }
   }

推荐阅读