2013-05-06 6 views
2

Я использую атрибут пользовательских ошибок в web.config для обработки пользовательских ошибоксессия является недействительным после ResponseRewrite

Как это:

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

После выдается ошибка, страница перенаправляется на страницу с ошибкой, но когда я получаю доступ к сеансу на странице ошибки, он равен нулю.

Причина, по которой я использую ResponseRewrite, а не ResponseRedirect, потому что я передаю Exception id через Элементы, используя elmah.

Я даже пытался создать новый пустой веб-сайт asp.net, и это все еще происходит.

Я видел некоторые подобные вопросы, но без ответа.

+0

Не могли бы вы добавить код или более подробную информацию? Я не воспроизвожу ошибку в visual studio 2012, IIS 8. – nmat

+0

Я использую visual studio 2010, iis6 – Amir

ответ

2

Я воспроизвел проблему, но я не могу понять, почему это происходит. В обработчике Application_Error я могу получить доступ к переменной Session, но при загрузке страницы она становится null.

Я нашел обходное решение here, которое решает проблему. Вам необходимо удалить redirectMode с вашего web.config и вручную сделать Server.Transfer, когда вы получите сообщение об ошибке. Так что это web.config:

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

И добавьте к этому Global.asax.cs файл:

void Application_Error(object sender, EventArgs e) 
{ 
    if(Context.IsCustomErrorEnabled) 
    { 
    Server.Transfer("~/Error.aspx"); 
    } 
} 

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

HttpException httpException = (HttpException) Server.GetLastError(); 
int httpCode = httpException.GetHttpCode(); 
switch (httpCode) 
{ 
    case 500: Server.Transfer("~/Pages/Error.aspx");break; 
    case 404: Server.Transfer("~/Pages/PageNotFound.aspx");break; 
    default: Server.Transfer("~/Pages/Error.aspx");break;  
} 
+0

Хорошо, мне удалось заставить его работать, используя ваше предложение, но знаете ли вы, как я могу использовать перенаправление по умолчанию из веб-конфигурацию, основанную на странице, на которой я нахожусь? – Amir

+0

@Amir Вы хотите использовать другую переадресацию для каждой страницы или просто хотите узнать, как читать свойство defaultRedirect из web.config? – nmat

+0

Я знаю, как читать перенаправление по умолчанию, но что происходит, когда я хочу использовать другую переадресацию? – Amir

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