我有一个Action方法在控制器中接受 long 值:
public virtual ActionResult GetInfo(long Id)
如果有人劫持了POST / GET请求(例如,将 GetInfo?Id = 23 更改为 GetInfo?Id = THIS_IS_A_STRING ),则响应将包含错误的堆栈跟踪。
如何避免这种情况?如何通过控制器拦截错误的参数并将用户重定向到另一个页面?
答案 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"
};
}
}