c# - ASP.NET MVC 中的操作参数类型验证
问题描述
我的控制器中有一个接受长值的 Action 方法:
public virtual ActionResult GetInfo(long Id)
如果有人劫持 POST/GET 请求(例如将GetInfo?Id=23更改为GetInfo?Id=THIS_IS_A_STRING),则响应包含错误的堆栈跟踪。
如何避免这种情况?如何通过控制器拦截错误参数并将用户重定向到另一个页面?
解决方案
我要做的第一件事是向 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"
};
}
}
推荐阅读
- python - 在 tkinter 中提交后,如何重置组合框和输入字段等小部件?
- apostrophe-cms - 将 Apostrophe CSM 部署到 Heroku 时找不到 CSS 和 JS 资产
- java - 如何在完成活动后阻止用户在设定的时间内点击按钮
- javascript - 如何阻止机器人无缘无故地静默离线并且没有控制台错误
- spring - 从另一个服务调用方法时分离的实体
- excel - 如何在转置时绕过剪贴板
- fortran - Fortran 子例程在多次迭代后忘记了可分配的数组元素值
- python - 如何检查 lineedit 是否有焦点?
- python - 当在 requirements.txt 中提到它们时,如何通过 --no-build-isolation 安装 pip 包?
- java - 更新安卓模块