RedirectResult + Object как параметр в URL - PullRequest
5 голосов
/ 26 января 2012

Я занимаюсь разработкой полнофункционального веб-приложения и использую среду ASP.NET MVC 3.Я реализую подкласс ActionFilterAttribute.

Я переопределяю метод OnActionExecuting.Если в методе OnActionExecuting обнаружено исключение, я хочу перенаправить клиентский браузер.URL перенаправления нацелен на метод действия в одном из моих контроллеров.Я хочу передать данные из объекта Exception в URL-адрес перенаправления.

Есть ли способ создать URL, включающий объект Exception, и затем передать его в конструктор RedirectResult?

Ответы [ 3 ]

8 голосов
/ 26 января 2012

Есть ли способ создать URL, включая объект Exception, а затем передать его в конструктор RedirectResult?

Нет.Вы можете передавать только параметры строки запроса, например:

var values = new RouteValueDictionary(new
{
    action = "foo",
    controller = "bar",
    exceptiontext = "foo bar baz"
});
filterContext.Result = new RedirectToRouteResult(values);

, и в целевом действии вы сможете получить текстовый параметр исключения:

public Action Foo(string exceptionText)
{
    ...
}
3 голосов
/ 26 января 2012

Вы можете использовать TempData для подобных ситуаций.

Просто установите TempData["MyException"] = myException перед перенаправлением, а затем проверьте значение TempData в действии, на которое вы перенаправляете.

2 голосов
/ 26 января 2012

Лучшим решением было бы использование атрибута [HandleError]. Этот атрибут выполняет при возникновении ошибки, пользователю будет представлено представление «Ошибка». Как это работает, когда возникает ошибка, если присутствует атрибут [HandleError], ASP.NET MVC будет искать представление «Ошибка», сначала в папке представления контроллера, а затем в папке общего доступа.

Например:

[HandleError]
public class FooController : Controller {
    ...
}

Когда в каком-либо действии для FooController возникает ошибка, ASP.NET MVC сначала ищет в ~ / Views / Foo представление Error (представление с именем Error.aspx для механизма представления ASP.NET или Error.cshtml. для бритвы вид двигателя). Если это представление не найдено, оно будет искать в ~ / Views / Shared.

По вашему мнению, вы можете отображать общую ошибку, а также отображать любую информацию об исключениях.

См. http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx для более подробного объяснения атрибута [HandleError].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...