发生参数异常时重定向

时间:2015-12-17 06:30:47

标签: c# asp.net-mvc exception

在我的动作方法中,我使用了try-catch块。该方法需要一个整数参数,当传递空值时,将显示服务器错误页面。但我希望将其重定向到自定义错误页面。

[HandleError(ExceptionType = typeof(ArgumentException), View = "~/Views/SetValues/Error")]
public ActionResult Index(int id)
{
        //if(id==null)
        //{
        //    ViewBag.Error = "A null parameters passed to the function";
        //    return View("Error");
        //}
        try
        {
             .........
        }
        catch (Exception e)
        {
            ViewBag.Error = e.Message;
            return View("Error");
        }
} 

由于传递了null参数,因此未执行try catch块。 if语句也不起作用,因为检查总是失败。

是否可以通过不设置参数nullable进行解决?

我希望它重定向到我的自定义错误页面而不是我的功能重定向到服务器错误页面。

3 个答案:

答案 0 :(得分:3)

不确定,但请尝试过滤属性:

public class IdRequiredAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        object parameter = null;
        filterContext.ActionParameters.TryGetValue("id", out parameter);
        var id = parameter as int?;

        if (id == null)
        {
            var urlHelper = new UrlHelper(filterContext.Controller.ControllerContext.RequestContext);

            var url = urlHelper.Action("ErrorAction", "ControllerName");

            filterContext.Result = new RedirectResult(url);
        }
    }
}

...

[IdRequiredAttribute]
public ActionResult Index(int id)
{
    //...
}

答案 1 :(得分:0)

正确的解决方法是将参数设为可为空并检查

[HandleError(ExceptionType = typeof(ArgumentException), View = "~/Views/SetValues/Error")]
public ActionResult Index(int? id)
{
        if(id==null)
        {
            ViewBag.Error = "A null parameters passed to the function";
            return View("Error");
        }
        try
        {
             .........
        }
        catch (Exception e)
        {
            ViewBag.Error = e.Message;
            return View("Error");
        }
} 

另一点如果你不能让它可以为空,那么MVC框架将无法达到你的Index行动,因为它无法解决路线。解决方法可以是将参数设置为字符串,并检查是否可以从中解析整数值以继续进行。

答案 2 :(得分:0)

要显示自定义错误页面,请执行以下操作 - >在Web.config文件中添加

<customErrors mode="On" defaultRedirect="~/Controller/Action" />

然后使用此控制器并查看以显示错误页面。

注意: - 这可以用于未捕获的异常并避免黄页(错误页面)。但是,您也应该使用错误记录来获取详细信息。 Check this link for error logging

使用此功能,您也可以处理404和其他异常。