2012-01-25 2 views
5

Я разрабатываю полнофункциональное веб-приложение, и я использую структуру ASP.NET MVC 3. Я реализую подкласс ActionFilterAttribute.RedirectResult + Объект как параметр в URL-адресе

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

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

ответ

7

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

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

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

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

public Action Foo(string exceptionText) 
{ 
    ... 
} 
+0

Есть ли способ конвертировать объект Exception в строку запроса? Затем я передал бы строку запроса в конструктор RouteValueDictionary в качестве значения для ключа. Метод целевого действия будет принимать объект Exception в качестве входного параметра. – user1139666

+0

@ user1139666, нет, вы должны включать только те свойства, которые вас интересуют, в качестве параметров строки запроса. –

2

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

Например:

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

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

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

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

3

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

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

Смежные вопросы