Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

attribute does not seem to act at all

I am having problems using the [HandleError] attribute on my Controller Actions - it doesn't seem to work at all (i.e. it doesn't matter if the filter is there or not - I get the same results...). When an Exception is thrown, I get the standard red-toned Server Error in '/' Application error page instead of my custom view.

I have found a couple of other threads on the subject here on SO, and in most cases it seems that setting the customErrors option to On in web.config solved the problem. It has not for me, so I need to find a different solution.

My controller action:

[HandleError]
public ActionResult Index()
{
    throw new Exception("oops...");
    return View();
}

In my web.config file

<customErrors mode="On"></customErrors>

I have made sure that the Error.aspx file is in the Shared directory, too. What am I missing?

I am running ASP.NET MVC RC Refresh.

like image 764
Tomas Aschan Avatar asked Feb 08 '09 00:02

Tomas Aschan


2 Answers

You need to specify what page to redirect to as well.

<customErrors mode="On" defaultRedirect="Error.aspx" />

EDIT: Sorry the /Shared/ part should not bet there but you need to tell MVC which page to send the user to with Error.aspx. Then the default route looks for something called Error.aspx in shared.

It was very late! :) I guess that's why someone gave me a minus for the answer! :) At least it works here mate!

like image 199
mhenrixon Avatar answered Sep 25 '22 00:09

mhenrixon


Two useful things to know:

By default, HandleError does nothing when running under the development server. The intention is to show developers more useful information:

public virtual void OnException(ExceptionContext filterContext) {
    if (filterContext == null) {
        throw new ArgumentNullException("filterContext");
    }

    // If custom errors are disabled, we need to let the normal ASP.NET
    // exception handler execute so that the user can see useful
    // debugging information.
    if (filterContext.ExceptionHandled
        || ! filterContext.HttpContext.IsCustomErrorEnabled) {
        return;
    }

Note that this case is precisely what customError is supposed to control. If setting customError="On" does not change this behavior:

  1. Check your syntax.
  2. Make sure you're editing the Web.config in the project root, not the one in Views.
  3. Make sure no code sets HttpContext.IsCustomErrorEnabled.
  4. If all else fails, try turning debug off in Web.config

Second, there certain types of errors which HandleError will never handle, notably ASP.NET compilation errors. You don't say which error you're encountering.

like image 30
Craig Stuntz Avatar answered Sep 25 '22 00:09

Craig Stuntz