Pregunta

Estoy trabajando en un proyecto MVC donde he copiado un montón de trabajo de proyecto NerdDinner. En NerdDinner estamos volviendo unos puntos de vista como DinnerNotFound, InvalidOwner si no se encuentra una cena o si un usuario no es un propietario de la cena. Pero en mi proyecto que desee crear una Ver (CustomException) y utilizarlo para todas esas razones. Por eso, planteo excepción y atraparlos en caso OnException de mi basecontrller. Luego, desde allí Quiero rendir una vista personalizada después loging a ELMAH.

Pero el llamado que hace a esta vista (RedirectToAction ( "CustomException", ce);) tampoco parece funcionar, doenst vaya a la CustomException acción.

Puede alguien me ayude lo que podría ser la razón. He hecho una lista de todos los archivos aquí. También cómo debería hacer una entrada en el archivo global.asax.cs. códigos se dan a continuación.

Saludos Parminder

ListingExceptions.cs

Listing.Exceptions de espacio de nombres {     ListingExeceptions clase public static     {

    public static CustomException GetCustomException(Exception ex)
    {
        CustomException ce = new CustomException();
        switch (ex.Message)
        {
            case ItemConstant.INVALID_OWNER:
                ce = new CustomException("Invalid Owner", "OOps you are not owner of this item");
                break;
            case ItemConstant.ITEM_NOT_FOUND:
                ce = new CustomException("Item not Found", "The Item you are looking for couldnt be found");
                break;
            default:
               ce = new CustomException("Error ", "There is an Error.");
               break;
        }

        return ce;

    }


}

}

BaseController.cs

Listing.Controllers de espacio de nombres {     BaseController clase parcial pública: Controlador     {

    public virtual ActionResult CustomException(CustomException ce)
    {
        return View(ce);   
    }

    protected override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);

        CustomException ce = ListingExeceptions.GetCustomException(filterContext.Exception);
        ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
        filterContext.ExceptionHandled = true;

        RedirectToAction("CustomException",ce );
    }
}

}

ListingController.cs

Listing.Controllers de espacio de nombres

{

pública virtual ActionResult detalles (larga id, title cadena)         {

        Item item = itemRepository.GetItemByID(id);

        if (item == null)

        {

            throw new Exception("ItemNotFound");

        }

        else

        {

            return View("Details", new ListingFormViewModel(item, photoRepository));

        }
    }

}

global.asax.cs

routes.MapRoute (                             "Excepción", // nombre de la ruta                             "{Controlador} / {acción} / {ce}", // URL con parámetros                             nueva {controller = "Base", la acción = "CustomException", CE = ""});

¿Fue útil?

Solución

No estoy tan seguro de que puede redirigir al igual que dentro de OnException. La adición de un filterContext.Result = debería funcionar:

protected override void OnException(ExceptionContext filterContext)
{
    base.OnException(filterContext);

    CustomException ce = ListingExeceptions.GetCustomException(filterContext.Exception);
    ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
    filterContext.ExceptionHandled = true;

    filterContext.Result = RedirectToAction("CustomException",ce );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top