powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC - слетела настройка отображения ошибок
25 сообщений из 165, страница 1 из 7
ASP.NET MVC - слетела настройка отображения ошибок
    #38525558
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раньше у меня было своё отображение сообщений об ошибках, но почему-то вдруг всё сбилось (хотя настройки не менял) и стала отображаться полная информация об исключении, типа такой, как показана на картинке.

Настройки веб-конфига такие:

<customErrors mode="Off" />

<compilation debug="false"

Ошибки перехватываю в Global.asax в методе Application_Error. В нём формируется лог, который пишется на сервере, и сообщение для пользователя, которое отображается на специальной странице через направление на специальный контроллер и действие:

this.Response.Redirect("/Error/ErrorPage");


Так вот, раньше всё работало. Пришёл сегодня, покодил немного (вышеупомянутые настройки не менял) - лог перестал писаться, перенаправление не работает, зато вот эту дефолтную байду, что на картинке, показывает. При этом на изменение compilation debug не реагирует. Делал ребилд проекта - не работает.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525583
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага! Нашёл строчку, что это натворила. Когда писал лог (всё в том же методе Application_Error), добавил строчку

Код: c#
1.
ctx.Request.ServerVariables["X_FORWARDED_FOR"].Split(',').ToList().ForEach(adress => sb.AppendLine(adress));



где sb - предварительно созданный в том же методе StringBuilder.

Как это может к такому привести?! О_о

Не, я, конечно, щас раскрою эту строчку и по строчке отслежу, но...



...Пока такая догадка - при возникновении ошибки в самом Application_Error, отображается вот то, что на картинке, несмотря на все compilation debug="false".
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525584
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ctx - это HttpContext ctx = this.Context;
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525606
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, всё, решил
http://stackoverflow.com/questions/17521277/http-x-forwarded-for-missing-from-servervariables-in-c-sharp .

Надо проверять наличие такой переменной. Но всё же странно, почему при возникновении ошибки в Application_Error показывается подробная информация об исключении даже при compilation debug="false"?
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525842
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320
Код: c#
1.
ctx.Request.ServerVariables["X_FORWARDED_FOR"].Split(',').ToList().ForEach(adress => sb.AppendLine(adress));


Что это за гавнокод?
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525859
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320
Код: c#
1.
ctx.Request.ServerVariables["X_FORWARDED_FOR"].Split(',').ToList().ForEach(adress => sb.AppendLine(adress));


Что это за гавнокод?
А что не так? Достаю переменную из сервера ( в ней адреса ), разделяешь адреса по разделителю и каждый адрес логируешь (сначала в стринг билдер, затем весь билдер - в лог).
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525913
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, учи Linq. Зачем делать лишний цикл ToList, а потом заново по нему бегать?

http://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.aggregate(v=vs.110).aspx

Код: c#
1.
var sb = ...Split(',').Aggregate(new StringBuilder(), (a, b) => a.AppendFormat(b));
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525926
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320, учи Linq. Зачем делать лишний цикл ToList, а потом заново по нему бегать?

http://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.aggregate(v=vs.110).aspx

Код: c#
1.
var sb = ...Split(',').Aggregate(new StringBuilder(), (a, b) => a.AppendFormat(b));


А если стринг билдер создан ранее и там уже много других строк?
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38525975
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А если стринг билдер создан ранее и там уже много других строк?
А если подумать?

Код: c#
1.
...Aggregate(sb, (a, b) => a.AppendFormat(b))
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526043
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, Ну что............... опять бан ?((
по восьмому пункту не сошлись, или мод -р турбину перекрутил на сухую...
тут вам не там...
А вобще бан не за что имхо...
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526500
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320, учи Linq. Зачем делать лишний цикл ToList, а потом заново по нему бегать?

http://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.aggregate(v=vs.110).aspx

Код: c#
1.
var sb = ...Split(',').Aggregate(new StringBuilder(), (a, b) => a.AppendFormat(b));



ещё вариант

Код: c#
1.
sb.Append(String.Concat(ctx.Request.ServerVariables["X_FORWARDED_FOR"].Split(',').Select(x => x + "\n"));



но вот это самый очевидный и быстрый. никаких в данном случае абсолютно ненужных сплитов и LINQ:

Код: c#
1.
sb.Append(ctx.Request.ServerVariables["X_FORWARDED_FOR"].Replace(",", "\n"));



человеки, что с вами? почему всё надо обязательно сделать, хоть и красиво, но через Ж?
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526501
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗачем делать лишний цикл ToList, а потом заново по нему бегать?

кстати, ToList был сделан ради ForEach я так понимаю )) но всё равно говнокод, да.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526519
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУЗачем делать лишний цикл ToList, а потом заново по нему бегать?

кстати, ToList был сделан ради ForEach я так понимаю )) но всё равно говнокод, да.
Да, ради. Да, говнокод.

Просто первое, что пришло в голову - аналог форича, но не хотелось городить цикл. Почему метод (именно метод) ForEach есть только у списков и массивов? Его неплохо бы для всех коллекций сделать, чтобы потом удобно, в одну строку лямбдами проходиться по ним. На StackOverflow есть даже примеры подобных циклов как расширяющих методов, а в сам .NET почему-то не завезли.

Впрочем ...
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526520
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ещё такие извращения через селект http://stackoverflow.com/a/9092364/808128
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526521
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Есть ещё такие извращения через селект http://stackoverflow.com/a/9092364/808128
Как у Хвоста.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38526981
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, всем спасибо. Сделал как у Хвоста - с Replace.

А Aggregate вот где нашёл удобно применять - для итераций с дествием по NameValueCollection. Только я раньше делал с Select, а теперь с Aggregate. Например, есть у нас коллекция NameValueCollection. Надо пройтись по ней и что-нибудь с ней сделать. Раньше я делал так (пример с параметрами формы, sb - стринг билдер, созданный ранее)

Код: c#
1.
2.
3.
4.
5.
6.
7.
sb.AppendLine(
    String.Join(
        "\n",
        Request.Unvalidated.Form
            .Cast<string>()
            .Select(key => new KeyValuePair<string, string>(key, Request.Unvalidated.Form[key]))
            .Select(pp => String.Format("{0}='{1}'", pp.Key, pp.Value))));




а теперь делаю так

Код: c#
1.
2.
3.
4.
5.
6.
Request.Unvalidated.Form
    .Cast<string>()
    .Aggregate(sb, (stringBuilder, nextKey) => stringBuilder.AppendFormat(
        "{0}='{1}'",
        nextKey,
        Request.Unvalidated.Form[nextKey]));



Ну, как вам мои лямбды? Кто тут говорил, что за лямбды бьют?

Кстати, не помню, нафига я использовал раньше KeyValuePair. В первом случае можно было обойтись одним селектом и аналогичной лямбдой, как во втором случае. Наверное, тупо передрал пример, не подумав.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527476
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

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

Код: c#
1.
2.
3.
4.
5.
var uform = Request.Unvalidated.Form;

uform
    .AllKeys
    .Aggregate(sb, (b, key) => b.AppendFormat("{0}='{1}'", key, uform[key]));



дело в том, что никто не гарантирует, что свойство каждый раз не вычисляется (хотя вроде как все должны понимать, что это плохой тон, да и Рихтер неоднократно вычисляемые проперти обругивал).

к тому же код чище и лучше подвержен сопровождению.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527483
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320На StackOverflow есть даже примеры подобных циклов как расширяющих методов, а в сам .NET почему-то не завезли.

дело в том, что LINQ это язык запросов (все методы расширения должны возвращать значение(я)). расширение ForEach не нужен, так как есть прекрасные нативные for(in) и for(;;), которые подходят лучше. вот где действительно уместно применение такой конструкции, это Parallel.ForEach
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527728
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttuser7320На StackOverflow есть даже примеры подобных циклов как расширяющих методов, а в сам .NET почему-то не завезли.

дело в том, что LINQ это язык запросов (все методы расширения должны возвращать значение(я)). расширение ForEach не нужен, так как есть прекрасные нативные for(in) и for(;;), которые подходят лучше. вот где действительно уместно применение такой конструкции, это Parallel.ForEach
Да я и сам привёл ссылку на ссылку на Липперта. Насколько я понял, там философские рассуждения. Просто они (Липперт и Ко, которые рулили созданием Дотнета) решили сделать вроде как самый оптимальный для всех случаев вариант. Но есть и много случаев, когда такой вот форич в виде метода очень даже подошёл бы. Можно, конечно, циклом, но метод с лямбдой - короче и сахарнее.

hVosttuser7320,

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

Код: c#
1.
2.
3.
4.
5.
var uform = Request.Unvalidated.Form;

uform
    .AllKeys
    .Aggregate(sb, (b, key) => b.AppendFormat("{0}='{1}'", key, uform[key]));



дело в том, что никто не гарантирует, что свойство каждый раз не вычисляется (хотя вроде как все должны понимать, что это плохой тон, да и Рихтер неоднократно вычисляемые проперти обругивал).

к тому же код чище и лучше подвержен сопровождению.
Не понял, причём тут вычисляемые свойства? Тут же поля формы.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527769
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Но есть и много случаев, когда такой вот форич в виде метода очень даже подошёл бы.

дело не в филосовских рассуждениях. LINQ это язык запросов. соответственно для программиста, который будет читать и поддерживать код, должно быть как минимум кристально очевидно, что цепочка возвращает какой-то результат. даже результат работы Aggregate надо присваивать по-любому, а не паразитировать на "текучем" свойстве того же StringBuilder.


user7320Не понял, причём тут вычисляемые свойства? Тут же поля формы.

ещё раз. SomeObject.SomeProperty.SomeSubProperty и т.д. надо загонять в локальную переменную, если требуется к свойству SomeSubProperty обращаться в теле метода более одного раза. такая мелочь, а выдаёт новичка с головой.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527895
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttuser7320Но есть и много случаев, когда такой вот форич в виде метода очень даже подошёл бы.

дело не в филосовских рассуждениях. LINQ это язык запросов. соответственно для программиста, который будет читать и поддерживать код, должно быть как минимум кристально очевидно, что цепочка возвращает какой-то результат. даже результат работы Aggregate надо присваивать по-любому, а не паразитировать на "текучем" свойстве того же StringBuilder.
Т. е. когда надо пройтись методом по каждому элементу коллеции, то, по-вашему, лучше использовать обычный цикл, чем "метод, который проходит по всем элементам коллекции, с лямбдой"? И при этом это правильно не с точки зрения выполнения кода программы, а с точки зрения чтения и понимания кода другим программистом? Поэтому чисто технически ничего не мешает сделать форич для коллекций в виде расширяющего метода или ещё чего (на том же StackOverflow есть много простейших реализаций), но вот философия не позволяет?

Я же и говорю - философия. Достаточно поменять одно слово в определении LINQ (query... ну или понимать его шире, чем просто запрос, на который должен прийти ответ), и проблемы как не бывало. Да?

hVosttuser7320Не понял, причём тут вычисляемые свойства? Тут же поля формы.

ещё раз. SomeObject.SomeProperty.SomeSubProperty и т.д. надо загонять в локальную переменную, если требуется к свойству SomeSubProperty обращаться в теле метода более одного раза. такая мелочь, а выдаёт новичка с головой.
Перестраховка? Или традиции и "философия общего случая" и "надо делать универсально"?

Так ведь это свойство измениться не может - мне на сервер форма со своими значениями "приехала" от клиента и там всё жёстко забито. Поэтом в данном конкретном случае я не вижу причины заводить отдельную переменную для считываемых полей. А вот в тех случаях, когда во время чтения могут поменяться значения - да, надо бы "зафиксировать момент". Но и тогда может быть нужно, чтобы считывались именно текущие значения полей, а не зафиксированные на какой-то момент.

Я к тому, что это всё от случая зависит, а вы как бы хотите подвести общее правило - "делать так всегда и везде". Да?
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527936
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я же и говорю - философия. Достаточно поменять одно слово в определении LINQ

т.е. считаете, тама в команду разработки фреймворка каких-то оболдуев набрали с подворотни, которые не смогли догадаться "мегафичу" прикрутить? цикл это цикл, для этого есть всеми понимаемая , ясная, и удобная синтаксическая конструкция , да не одна, простая, чистая, однозначная.

user7320Т. е. когда надо пройтись методом по каждому элементу коллеции, то, по-вашему, лучше использовать обычный цикл, чем "метод, который проходит по всем элементам коллекции, с лямбдой"?

этот супер-метод с лямбдой, нафиг в языке не упёрся

user7320Я к тому, что это всё от случая зависит, а вы как бы хотите подвести общее правило - "делать так всегда и везде". Да?

нет, я всего лишь порекомендовал обзавестись полезной привычкой, если имеется желание когда-нибудь в обозримом будущем поработать над разработкой проектов в команде.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38527961
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

в защиту новшевств добавлю, что когда прикрутили LINQ, ещё долгое время основная масса боялась его серьёхно использовать, предпочитая обычные циклические конкструкции для перебора элементов. да и сейчас ещё не каждый способен написать на LINQ что-нибудь по-сложнее обычного фильтра и конверта. однако уже повадились с гордостью писать свои кул-расширения типа ForEach, предварительно скопипастив кусок со StackOverflow...
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38529005
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttuser7320Я к тому, что это всё от случая зависит, а вы как бы хотите подвести общее правило - "делать так всегда и везде". Да?

нет, я всего лишь порекомендовал обзавестись полезной привычкой, если имеется желание когда-нибудь в обозримом будущем поработать над разработкой проектов в команде.
А что, когда проекты в команде, то везде и всюду фичекат? "Так, эти средства языка не используем - это слишком голову засоряет", "Тут лямбды не надо... и вообще лямбды не надо - у нас за них бьют", "Элементы коллекций менять только циклом. А Линк у нас вообще забанен на уровне кастомного дистрибутива Дотнета, из которого он выкинут"?

hVosttuser7320,

в защиту новшевств добавлю, что когда прикрутили LINQ, ещё долгое время основная масса боялась его серьёхно использовать, предпочитая обычные циклические конкструкции для перебора элементов. да и сейчас ещё не каждый способен написать на LINQ что-нибудь по-сложнее обычного фильтра и конверта. однако уже повадились с гордостью писать свои кул-расширения типа ForEach, предварительно скопипастив кусок со StackOverflow...
"Боятся использовать" - муахаха! Так и сказали бы, что не слезают с заказчиков, которые на 2.0 всё заказывают и на XP без сервис паков сидят - думают, что деньги экономят.

"Бояки" тупо ленятся учить что-то новое. Зато знатно работают в командах - наверное, из тиммитингов-говорилен не вылезают, бездельники хреновы.
...
Рейтинг: 0 / 0
ASP.NET MVC - слетела настройка отображения ошибок
    #38529090
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А что, когда проекты в команде, то везде и всюду фичекат? "Так, эти средства языка не используем - это слишком голову засоряет", "Тут лямбды не надо... и вообще лямбды не надо - у нас за них бьют", "Элементы коллекций менять только циклом. А Линк у нас вообще забанен на уровне кастомного дистрибутива Дотнета, из которого он выкинут"?

я откеда знаю, во всех командах мира мне не довелось учавствовать. иногда без слёз не взглянешь.

user7320Так и сказали бы, что не слезают с заказчиков, которые на 2.0 всё заказывают и на XP без сервис паков сидят - думают, что деньги экономят.

весьма распространённая ситуация
...
Рейтинг: 0 / 0
25 сообщений из 165, страница 1 из 7
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC - слетела настройка отображения ошибок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]