powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC: обработка исключения в контроллере
406 сообщений из 406, показаны все 17 страниц
MVC: обработка исключения в контроллере
    #38765905
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обрабатываю исключение контроллера в самом контроллере:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    protected override void OnException(ExceptionContext filterContext)
    {
      if (...)
      {
        ...
        filterContext.Result = ...;
        filterContext.ExceptionHandled = true;
      }
      else
      {
        base.OnException(filterContext);
      }
    }

Пока отлаживал в студии - все нормально, необходимые исключения перехватывались, на клиента возвращался код 200.

Выложил на хостинг - стал возвращаться код 500.
Подумав, добавил в обработчик строку:
Код: c#
1.
          filterContext.HttpContext.Response.StatusCode = 200;

заработало и на хостинге.


То есть проблема решена, но хотелось бы понять, отчего разное поведение?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38765948
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProОбрабатываю исключение контроллера в самом контроллере
Плохая практика.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38765979
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТо есть проблема решена, но хотелось бы понять, отчего разное поведение?Разная версия IIS?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38765993
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proхотелось бы понять, отчего разное поведение?
Потому что веб-сервер используемый при отладке и полноценный IIS это две разных вещи.

Shocker.ProПодумав, добавил в обработчик строку:
Код: c#
1.
filterContext.HttpContext.Response.StatusCode = 200;


Это плохая идея т.к. ошибки будут индексироваться поисковиками.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766019
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileЭто плохая идея т.к. ошибки будут индексироваться поисковиками.не будут - это ответ на аякс-запрос.
bazileПотому что веб-сервер используемый при отладке и полноценный IIS это две разных вещи.это-то я догадался, но что именно влияет? По моему пониманию, это вообще не должно было выйти за пределы MVC-шной и моей dll-ки и IIS-у должен быть отдан только готовый statuscode
codearticles.ruПлохая практика.Почему? Исключения генерятся на различных уровнях, из репозитория, из BL, самим контроллером. Некоторое количество известных ситуаций обрабатывает контроллер и выдает пользователю более информативное сообщение, чем 500.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766028
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProПочему? Исключения генерятся на различных уровнях, из репозитория, из BL, самим контроллером. Некоторое количество известных ситуаций обрабатывает контроллер и выдает пользователю более информативное сообщение, чем 500.
Исключение - это серьезный сбой программы, а не просто какая-то нотификация из недр BL и прочих слоёв. Нотификации нужно получать через результаты методов. Исключения нужно получать глобально, хотя бы уж через базовый контроллер, от которого наследуются остальные контроллеры.

Хотя бы что-то типа того:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
protected override void OnException(ExceptionContext filterContext)
{
    if (filterContext != null)
    {
        var ex = filterContext.Exception ?? new Exception("Информация об исключении отсутствует.");

        filterContext.ExceptionHandled = true;

        if (ex is HttpException && (ex as HttpException).GetHttpCode() == 401)
        {
            filterContext.Result = AuthorizeRedirectAttribute.RouteResult;
            return;
        }

        var exeption = GetErrors(ex).Last();
        var data = new ErrorModel
        {
            ErrorMessage = exeption.Message, // string.Format("{0}\n{1}", exeption.Message, exeption.StackTrace),
            Exceptions = new[] { exeption },
        };

        filterContext.Result = View("ErrorPage", data);
    }
}

public IEnumerable<Exception> GetErrors(Exception exception)
{
    if (exception is DbEntityValidationException)
    {
        foreach (var validationErrors in (exception as DbEntityValidationException).EntityValidationErrors)
        {
            foreach (var validationError in validationErrors.ValidationErrors)
            {
                exception = new Exception(string.Format("{0}:{1}", validationError.PropertyName, validationError.ErrorMessage));
                break;
            }
        }
    }

    while (exception != null)
    {
        yield return exception;
        exception = exception.InnerException;
    }
}
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766037
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru,

где у себя на сайте 404 перехватываешь? Чё-то у меня путь с точками нифига не попадает в application error в global.asax, а другие 404 нормал.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766039
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruИсключение - это серьезный сбой программы, а не просто какая-то нотификация из недр BL и прочих слоёв. Нотификации нужно получать через результаты методов.Чё опять?

Будем действовать как в Win API: getlasterror, hresult и всё такое? Сделать специальный InfoException для прикладных ошибок не лучше? Во все времена делалось именно так.
codearticles.ruИсключения нужно получать глобально, хотя бы уж через базовый контроллер...Лучше написать фильтр, и присобачить его на соответствующем уровне.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766048
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
st_stcodearticles.ru,

где у себя на сайте 404 перехватываешь? Чё-то у меня путь с точками нифига не попадает в application error в global.asax, а другие 404 нормал.

http://codearticles.ru/articles/2337
http://codearticles.ru/articles/2506

Алексей КЧё опять?

Будем действовать как в Win API: getlasterror, hresult и всё такое? Сделать специальный InfoException для прикладных ошибок не лучше? Во все времена делалось именно так.
codearticles.ruИсключения нужно получать глобально, хотя бы уж через базовый контроллер...Лучше написать фильтр, и присобачить его на соответствующем уровне.
В сад! :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766089
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruИсключение - это серьезный сбой программы, а не просто какая-то нотификация из недр BL и прочих слоёв. Нотификации нужно получать через результаты методов.Зачем? Методы возвращают необходимую информацию. Превращать исключение на нижнем уровне в параметр и начинать его гнать вверх по стеку вызова вручную? нафига. Исключение само пройдет по стеку, не нужно будет париться в каждом методе.
К тому же, это не нотификации, это именно исключения. Например неожиданно не найдена запись в БД (возможно она была удалена этим же пользователем в другом сеансе работы). Но, не вижу, почему бы не использовать исключения как нотификации по непредусмотренным стандартной обработкой ситуациям.
codearticles.ruИсключения нужно получать глобально, хотя бы уж через базовый контроллер, от которого наследуются остальные В общем-то так и делаю. Есть коллекция стандартных текстов для некоторых исключений, если базовый контроллер нашел исключение в своей коллекции - он меняет ответ.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766186
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru,

Первую ссылку глянул, 404 нормально точки в урле схватывает, единственное на старом коде 500-ые поотваливались - Server.GetLastError() в null ушёл, надо починить. Вторую ссылку ещё не тестил.

На этом форуме смотрю с точками тоже шняга, но уже не 404, а 500 - http://sql.ru/.../ , в то время как sql.ru/ghggh нормально.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766188
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто-нибудь ответ на первоначальный вопрос знает?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766198
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro А кто-нибудь ответ на первоначальный вопрос знает? Нет.

Решили не по стандарту ошибки обрабатывать, сами и разбирайтесь :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766200
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro А кто-нибудь ответ на первоначальный вопрос знает? 16655639

?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766227
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.rust_stcodearticles.ru,

где у себя на сайте 404 перехватываешь? Чё-то у меня путь с точками нифига не попадает в application error в global.asax, а другие 404 нормал.

http://codearticles.ru/articles/2337
http://codearticles.ru/articles/2506 Боян . Глобальный обработчик системных ошибок надо делать через global.asax. А прикладные ошибки лучше ловить фильтрами .

codearticles.ruАлексей КЧё опять?

Будем действовать как в Win API: getlasterror, hresult и всё такое? Сделать специальный InfoException для прикладных ошибок не лучше? Во все времена делалось именно так.
пропущено...
Лучше написать фильтр, и присобачить его на соответствующем уровне.
В сад! :)А если базовый контроллер будет иметь ответственность прикладного назначения, как это обычно бывает, и нужно будет по разному обрабатывать прикладные ошибки? Нарушение SRP, не?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766233
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAРешили не по стандарту ошибки обрабатыватьТо есть предоставление средой MVC мне возможности обрабатывать исключения - нестандарт?
skyANAсами и разбирайтесь :)Я бы поразбирался, но у меня нет опыта отладки на хостинге и с данным вопросом не знаю куда соваться.
Алексей К 16655639
?Shocker.ProbazileПотому что веб-сервер используемый при отладке и полноценный IIS это две разных вещи.это-то я догадался, но что именно влияет? По моему пониманию, это вообще не должно было выйти за пределы MVC-шной и моей dll-ки и IIS-у должен быть отдан только готовый statuscode?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766244
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProskyANAРешили не по стандарту ошибки обрабатыватьТо есть предоставление средой MVC мне возможности обрабатывать исключения - нестандарт?StatusCode 200 возвращать не стандарт.

Exception Handling in ASP.NET MVC
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766249
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КГлобальный обработчик системных ошибок надо делать через global.asax.
Забудь про global.asax, иначе MVC6 пошлет тебя далеко в лес.

Алексей КА прикладные ошибки лучше ловить фильтрами
Не принципиально.

Алексей КА если базовый контроллер будет иметь ответственность прикладного назначения, как это обычно бывает, и нужно будет по разному обрабатывать прикладные ошибки? Нарушение SRP, не?
Никаких по-разному, никаких прикладных назначений. Контроллеры все равны и подчиняются своему базовому классу - основа ООП. Все попрыгушки и мультики идут в сад.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766253
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАлексей К 16655639
?Shocker.Proпропущено...
это-то я догадался, но что именно влияет? По моему пониманию, это вообще не должно было выйти за пределы MVC-шной и моей dll-ки и IIS-у должен быть отдан только готовый statuscode?Имел ввиду версию IIS 7.5, 8.5 и т. п.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766269
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КГлобальный обработчик системных ошибок надо делать через global.asax.

С этим как раз таки и проблема - обычные 404-ые ловит ( http://site.com/ghghghgh), а с точками в урле вообще в Application_Error() не попадает.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766273
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей КГлобальный обработчик системных ошибок надо делать через global.asax.
Забудь про global.asax, иначе MVC6 пошлет тебя далеко в лес.А MVC6 есть? Вот когда будет, тогда и будем. :-)

codearticles.ruАлексей КА прикладные ошибки лучше ловить фильтрами
Не принципиально.Принципиально! Нарушение SRP - худшее из бед! Предлагается прикручивать обработку ошибок не наследованием, а композицией.

codearticles.ruАлексей КА если базовый контроллер будет иметь ответственность прикладного назначения, как это обычно бывает, и нужно будет по разному обрабатывать прикладные ошибки? Нарушение SRP, не?
Никаких по-разному, никаких прикладных назначений.Базовый контроллер для, например, типового CRUD делать не надо?

codearticles.ruКонтроллеры все равны и подчиняются своему базовому классу - основа ООП. Все попрыгушки и мультики идут в сад.Это одно из типовых решений, называемое Layer Superclass, но не об этом сейчас. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766277
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stАлексей КГлобальный обработчик системных ошибок надо делать через global.asax.

С этим как раз таки и проблема - обычные 404-ые ловит ( http://site.com/ghghghgh), а с точками в урле вообще в Application_Error() не попадает.Если туда не попадает, значит в приложении обработать такую ошибку невозможно, если я ничего не путаю.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766282
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruКонтроллеры все равны и подчиняются своему базовому классу - основа ООП.

Опытный программист всегда предпочтёт агрегацию наследованию, аспект оверрайду. ООП как основа для архитектуры хороша только для узконаправленных библиотек и задач, напрямую отражающих наследование в своей логике. Основывать архитектуру приложения на ООП будет только новичёк, прочитавший одну из пропогандонских книжонок времён мамонта, или упоротый укурыш. Базовый контроллер как "центр вселенной" приложения это однозначная тухлятина. Тем более для таких вещей, как обработка ошибок и прокидывание сервисов.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766295
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stАлексей КГлобальный обработчик системных ошибок надо делать через global.asax.

С этим как раз таки и проблема - обычные 404-ые ловит ( http://site.com/ghghghgh), а с точками в урле вообще в Application_Error() не попадает.Хотя, может быть это ?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766299
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttcodearticles.ruКонтроллеры все равны и подчиняются своему базовому классу - основа ООП.

Опытный программист всегда предпочтёт агрегацию наследованию, аспект оверрайду. ООП как основа для архитектуры хороша только для узконаправленных библиотек и задач, напрямую отражающих наследование в своей логике. Основывать архитектуру приложения на ООП будет только новичёк, прочитавший одну из пропогандонских книжонок времён мамонта, или упоротый укурыш. Базовый контроллер как "центр вселенной" приложения это однозначная тухлятина. Тем более для таких вещей, как обработка ошибок и прокидывание сервисов. +1234567890
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766306
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К Боян . Глобальный обработчик системных ошибок надо делать через global.asax. А прикладные ошибки лучше ловить фильтрами .

Ловить надо как можно ближе к месту появления, а не где-то там глобально или в фильтрах. Всё что должен сделать глобальный обработчик, это записать в лог, уведомить администратора и вернуть пользователю 500 (возможно, свою стандартную страницу ошибки). Глобальный обработчик ошибок регистрируется глобальным фильтром, никаких глобал.asax Так надо, чтобы можно было подменять обработчики для разных выпусков (тест, девелоп, продакшен), и для юнит-тестирования (вообще отключать).
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766315
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИмел ввиду версию IIS 7.5, 8.5 и т. п.так а причем тут версия IIS? statuscode IIS-у отдает моя прога/движок MVC, он должен прокидывать его без изменений клиенту... или нет?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766331
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАлексей КИмел ввиду версию IIS 7.5, 8.5 и т. п.так а причем тут версия IIS? statuscode IIS-у отдает моя прога/движок MVC, он должен прокидывать его без изменений клиенту... или нет?

в IIS 7+ можно прописать свои страницы ошибок для каждого приложения в Web.config
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766352
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей К Боян . Глобальный обработчик системных ошибок надо делать через global.asax. А прикладные ошибки лучше ловить фильтрами .

Ловить надо как можно ближе к месту появления, а не где-то там глобально или в фильтрах. Всё что должен сделать глобальный обработчик, это записать в лог, уведомить администратора и вернуть пользователю 500 (возможно, свою стандартную страницу ошибки).Будем в каждом методе контроллера ставить одинаковый try...catch ? Удачи!

hVosttГлобальный обработчик ошибок регистрируется глобальным фильтром, никаких глобал.asax Так надо, чтобы можно было подменять обработчики для разных выпусков (тест, девелоп, продакшен), и для юнит-тестирования (вообще отключать).Тестировать надо слой логики а не MVC-контроллеров.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766354
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЛовить надо как можно ближе к месту появления...Ловить надо как можно дальше от места появления!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766355
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Ловить надо как можно ближе к месту появления , а не где-то там глобально или в фильтрах. Всё что должен сделать глобальный обработчик, это записать в лог, уведомить администратора и вернуть пользователю 500 (возможно, свою стандартную страницу ошибки).Будем в каждом методе контроллера ставить одинаковый try...catch ? Удачи!Почему из выделенного следует, что в методе контроллера?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766357
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttЛовить надо как можно ближе к месту появления...Ловить надо как можно дальше от места появления!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766362
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ловить надо там, где есть возможность обработать!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766373
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провел эксперимент по сабжу.

Оказывается на хостинге в
Код: c#
1.
HttpContext.Response.StatusCode

при обработке исключения заранее лежит 500, а при запуске из студии - 200
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766375
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Будем в каждом методе контроллера ставить одинаковый try...catch ? Удачи!Почему из выделенного следует, что в методе контроллера?Ну пусть будет в методе репозитария, какая разница?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766381
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Почему из выделенного следует, что в методе контроллера?Ну пусть будет в методе репозитария, какая разница?А как в методе репозитория обрабатывать?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766382
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЛовить надо там, где есть возможность необходимость обработать!Поправил. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766387
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот ошибку парсинга кастомизированного пользователем шаблона разметки вполне себе можно обработать в прикладном коде и вывести болезному информацию о том, в какой строке, какого файла он накосячил :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766388
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну пусть будет в методе репозитария, какая разница?А как в методе репозитория обрабатывать?Зачем, если есть возможность обработать централизованно в фильтрах?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766393
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
А как в методе репозитория обрабатывать?Зачем, если есть возможность обработать централизованно в фильтрах?Как? В лог записать? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766395
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА вот ошибку парсинга кастомизированного пользователем шаблона разметки вполне себе можно обработать в прикладном коде и вывести болезному информацию о том, в какой строке, какого файла он накосячил :)Да.
Код: c#
1.
2.
3.
4.
5.
6.
7.
try
{
}
catch(Exception e)
{
    throw new InfoException("Ошибка в строке 123.", e);
}
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766398
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAА вот ошибку парсинга кастомизированного пользователем шаблона разметки вполне себе можно обработать в прикладном коде и вывести болезному информацию о том, в какой строке, какого файла он накосячил :)Да.
Код: c#
1.
2.
3.
4.
5.
6.
7.
try
{
}
catch(Exception e)
{
    throw new InfoException("Ошибка в строке 123.", e);
}

Смешно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766399
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Зачем, если есть возможность обработать централизованно в фильтрах?Как? В лог записать? :)Да: лог, messageBox, httpResponse и т. п. Кому что требуется.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766404
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Да.
Код: c#
1.
2.
3.
4.
5.
6.
7.
try
{
}
catch(Exception e)
{
    throw new InfoException("Ошибка в строке 123.", e);
}

Смешно.Посмотри, какая цепочка исключений выстраивается при сохранении через Entity Framework. Ситуация аналогичная.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766408
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Как? В лог записать? :)Да: лог, messageBox, httpResponse и т. п. Кому что требуется .Требуется то, что описано в требованиях и отрисовано на мокапах :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766413
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Да: лог, messageBox, httpResponse и т. п. Кому что требуется .Требуется то, что описано в требованиях и отрисовано на мокапах :)Требуется то, что имеет положительный экономический эффект. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766419
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Смешно.Посмотри, какая цепочка исключений выстраивается при сохранении через Entity Framework. Ситуация аналогичная.Ни фига не аналогичная. Пользователь залил пачку из 10 файлов. 3 кривые. Нужно показать разом все не валидные с возможностью посмотреть детализацию ошибки по каждому из них.

Проброс исключения наверх тут не катит.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766424
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Требуется то, что описано в требованиях и отрисовано на мокапах :)Требуется то, что имеет положительный экономический эффект. :-)Воот! А не: "Да ну нах это говно, пойду к конкурентам".
Это вам не корпоративный софт пейсать :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766435
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Посмотри, какая цепочка исключений выстраивается при сохранении через Entity Framework. Ситуация аналогичная.Ни фига не аналогичная. Пользователь залил пачку из 10 файлов. 3 кривые. Нужно показать разом все не валидные с возможностью посмотреть детализацию ошибки по каждому из них.

Проброс исключения наверх тут не катит.AggregateException ?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766446
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КА MVC6 есть? Вот когда будет, тогда и будем. :-)
http://www.asp.net/vnext/overview/aspnet-vnext/overview

Алексей КПринципиально! Нарушение SRP - худшее из бед! Предлагается прикручивать обработку ошибок не наследованием, а композицией.
Какой нах SPR, какое оно имеет отношение к кетчингу эксцепций?

Алексей КБазовый контроллер для, например, типового CRUD делать не надо?
Не надо. Бизнес логике там не место.

Алексей КЭто одно из типовых решений, называемое Layer Superclass, но не об этом сейчас. :-)
Назови это хоть жопой на горе, по факту оно 100% централизованно решает вопросы исключений, возникающих в контроллерах. А это нам и надо.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766449
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruКонтроллеры все равны и подчиняются своему базовому классу - основа ООП.

Опытный программист всегда предпочтёт агрегацию наследованию, аспект оверрайду. ООП как основа для архитектуры хороша только для узконаправленных библиотек и задач, напрямую отражающих наследование в своей логике. Основывать архитектуру приложения на ООП будет только новичёк, прочитавший одну из пропогандонских книжонок времён мамонта, или упоротый укурыш. Базовый контроллер как "центр вселенной" приложения это однозначная тухлятина. Тем более для таких вещей, как обработка ошибок и прокидывание сервисов.
Не путать центр вселенной и централизованную обработку ошибок всех контроллеров по единому шаблону. Опытный программист отделяет мух от котлет, а не пишет центры вселенной. Прокидывание и инициализирование сервисов в базовом контроллере через тот же IoC не перечит ни единому паттерну проектирования. Не стоит бояться наследования.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766455
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КhVosttЛовить надо как можно ближе к месту появления...Ловить надо как можно дальше от места появления!
+1234567890 [/quot]

P.S. Хвост снова жжет профессионализмом
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766457
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAЛовить надо там, где есть возможность обработать!
Да везде есть эта возможность. Но тащить эти сопли прям из точки возникновения - кретинизм. Хотя можно и так.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766465
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КБудем в каждом методе контроллера ставить одинаковый try...catch ? Удачи!

ну желательно. чем ближе к источнику ошибки, тем проще обработать. что там в глобале можно сделать, куда сыпятся вообще всё, кроме как залогировать и послать пользователя куда подальше, я не знаю. например, открывая файл с диска, надо обернуть в try/catch, чтобы если что можно было по месту происшествия решить что делать, если файл не открывается. может просто сообщение показать правильное, а не выплёвывать ошибку 500? и т.д.

Алексей КТестировать надо слой логики а не MVC-контроллеров.

тестировать надо всё. не везде конечно, но мы стараемся покрывать 100%. это миллион раз помогало, особенно в процессе доработок. допустим сдали проект, всё ок. потом через пол года приходит клиент и говорит, надо кое что приделать, или поменять. доделываем, меняем, а юнит-тесты дают гарантию, что ничего при этом не сломалось. это конечно не отменяет работу QA, но здорово её упрощает.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766467
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КХотя, может быть это ?

Да, оказалось оно самое. На форумах ссылки на сайт размещают и незарегистрированным пользователям выдаётся что-то типа http://site.com/catalog/.../dresses/ При переходе по такой ссылке юзер идёт мимо Application_Error(). А с relaxedurltofilesystemmapping нормал.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766474
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ни фига не аналогичная. Пользователь залил пачку из 10 файлов. 3 кривые. Нужно показать разом все не валидные с возможностью посмотреть детализацию ошибки по каждому из них.

Проброс исключения наверх тут не катит.AggregateException ? Ахаха. Изображаешь Equus asinus?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766477
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAЛовить надо там, где есть возможность обработать!
Да везде есть эта возможность. Но тащить эти сопли прям из точки возникновения - кретинизм. Хотя можно и так.С умным видом сказал сферическую фигню :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766480
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...
Да везде есть эта возможность. Но тащить эти сопли прям из точки возникновения - кретинизм. Хотя можно и так.С умным видом сказал сферическую фигню :)
Каков начальный вопрос, таков конечный ответ
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766492
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruНе путать центр вселенной и централизованную обработку ошибок всех контроллеров по единому шаблону. Опытный программист отделяет мух от котлет, а не пишет центры вселенной. Прокидывание и инициализирование сервисов в базовом контроллере через тот же IoC не перечит ни единому паттерну проектирования. Не стоит бояться наследования.

Мозги не ипай людям. Страх здесь не при чём. Танки грязи не боятся, но это не значит, что танкам при этом надо всегда по уши в грязи сидеть. Про мух и котлет в самую точку, только ты по ходу как раз этого не понимаешь. Прокидывание и инициализация в базовом контроллере - это убогое говнище, за одно упоминание которого уже должно быть стыдно, а так делать это себя не уважать. И про какие такие мухи и котлеты ты мне тут чешешь? Ты можешь базовый контроллер заменить, не трогая ни самого базового контроллера, ни его наследника? Хер. Ты можешь сделать независимый компонент с контроллером, который не знает про существование твоего базового говноконтроллера, и при этом подключается и существует с остальными контроллерами на равных, пользуясь теми же "благами цивилизации"? Как ты тестировать это говнище будешь? Я понимаю, что ничего из вышеперечисленного ты никогда не делал, юнит-тестирование это для тебя филькина грамота, о которой ты только в статьях на хабре читал, а запилить студенческую поделку это пжалста, потом напускать на себя умный вид, с понтом знаешь как-нада
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766495
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КБудем в каждом методе контроллера ставить одинаковый try...catch ? Удачи!

ну желательно. чем ближе к источнику ошибки, тем проще обработать. что там в глобале можно сделать, куда сыпятся вообще всё, кроме как залогировать и послать пользователя куда подальше, я не знаю. например, открывая файл с диска, надо обернуть в try/catch, чтобы если что можно было по месту происшествия решить что делать, если файл не открывается. может просто сообщение показать правильное, а не выплёвывать ошибку 500? и т.д."Правильное сообщение" определяется по типу исключения при логировании.
hVosttАлексей КТестировать надо слой логики а не MVC-контроллеров.
тестировать надо всё.Тестировать не надо ничего? Наверное, истина где-то посередине.
hVosttне везде конечно, но мы стараемся покрывать 100%.Это маразм.
hVosttэто миллион раз помогалоЭто самовнушение.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766496
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
AggregateException ? Ахаха. Изображаешь Equus asinus?Просто пошутил. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766502
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К"Правильное сообщение" определяется по типу исключения при логировании.

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

Алексей КЭто маразм.

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

я не имел в виду под правильным сообщением строку с сообщением. исключение прерывает работу всего метода, и тебе уже тупо некуда воткнуть это сообщение, только показать его глобально. пользователь выделил и отправил на сервак 10 изображений, среди них случайно попал файл не являющийся изображением. в твоём случае вся загрузка отвалится с одним тупым сообщением: Ошибка 500, файл не является изображением. в то время, как надо было загрузить всё, что можно было загрузить и правильно отчитаться.Это частный случай. Не нужно на него ориентироваться.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766624
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЭто частный случай. Не нужно на него ориентироваться.

А кто на него ориентируется? Это один из многочисленных примеров с ходу пришедших на ум. Глобальный отлов исключений связан с неожиданными ошибками, и там нет смысла изучать тип исключения, это ничего не даст, ни чем не поможет пользователю, а пользователя по правилам хорошего тона информировать о подробностях таких ошибок не нужно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766676
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КЭто частный случай. Не нужно на него ориентироваться.

А кто на него ориентируется?Понимаешь, Алексей он всегда через призму своего проекта говорит.
В его унылом корпоративном продукте это частный случай. В его унылом корпоративном продукте не нужно на него ориентироваться.

Вот так его надо читать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38766998
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


А кто на него ориентируется?Понимаешь, Алексей он всегда через призму своего проекта говорит.
В его унылом корпоративном продукте это частный случай. В его унылом корпоративном продукте не нужно на него ориентироваться.

Вот так его надо читать.Ну нет, я буду смотреть через призму унылых CRM от hVostt, ага...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767009
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу нет, я буду смотреть через призму унылых CRM от hVostt, ага...

гони 500 р.! никто не может смотреть через призму моих унылых CRM забесплатно!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767142
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Понимаешь, Алексей он всегда через призму своего проекта говорит.
В его унылом корпоративном продукте это частный случай. В его унылом корпоративном продукте не нужно на него ориентироваться.

Вот так его надо читать.Ну нет, я буду смотреть через призму унылых CRM от hVostt, ага... Хоть раз бы мог задуматься о том, что, помимо вялотекущих корпоративных бизнес-процессов, существуют и другие, со своей спецификой и требованиями.

Ничего. В один прекрасный момент топ-менеджмент вдруг поменяется, откроешь для себя новый мир
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767232
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну нет, я буду смотреть через призму унылых CRM от hVostt, ага... Хоть раз бы мог задуматься о том, что, помимо вялотекущих корпоративных бизнес-процессов, существуют и другие, со своей спецификой и требованиями.Из того, что было озвучено: "закачать 10 файлов на сервер" и "парсинг кастомизированного пользователем шаблона разметки" - это специфика, да, это всё меняет. Ну рассказывай, какая там у вас специфика ещё, чтобы я смог задуматься.
skyANAНичего. В один прекрасный момент топ-менеджмент вдруг поменяется, откроешь для себя новый мир Очень испугался...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767233
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну какая специфика...
Представь перманентный отчётный период, когда не раз в год корпоративный планктон жалуется, что ни фига не работает (весь год они тупо закрывали твой мессадж бокс), в постоянно находят косяки
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767241
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, да и смысл мне тебе что-то рассказывать?

Я участвовал в разработке для НК "ЮКОС", это было 8-11 лет назад. Видел я твой подход. Понимаю, что другие решения для тебя - это "специфика".
Ещё тогда говорили, что "ЮКОС" опережает лет на 7 другие компании в России по автоматизации.
Мы начали ASP.NET внедрять в 2004-м, с чем ты только в этом году познакомился.

Выходит не на 7, а на все 10
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767250
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу какая специфика...
Представь перманентный отчётный период, когда не раз в год корпоративный планктон жалуется, что ни фига не работает (весь год они тупо закрывали твой мессадж бокс), в постоянно находят косяки Мы делаем оперативные системы, они работают 24/7, так что не тот случай.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767251
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМы начали ASP.NET внедрять в 2004-м, с чем ты только в этом году познакомился.То, с чем я познакомился, в 2004-м ещё не было. В 2004-м все вменяемые разработчики писали корпоративное UI на Delphi. .Net в те времена был ещё так себе.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767253
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAНу какая специфика...
Представь перманентный отчётный период, когда не раз в год корпоративный планктон жалуется, что ни фига не работает (весь год они тупо закрывали твой мессадж бокс), в постоянно находят косяки Мы делаем оперативные системы, они работают 24/7, так что не тот случай.Почему не тот, или что-ты подразумеваешь под оперативной системой? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767255
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ 2004-м все вменяемые разработчики писали корпоративное UI на Delphi.А мы писали на Centura SQL Windows 32 :)

ASP.NET вообще-то для веб-морды внедряли. Покажи как мне тех вменяемых разработчиков, кто тебе веб-морду на Delphi в 2004-м писали.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767258
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Мы делаем оперативные системы, они работают 24/7, так что не тот случай.Почему не тот, или что-ты подразумеваешь под оперативной системой? :)Толсто тролишь, не понравилось.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767259
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще концепция MVC была ещё в 1979 году описана.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767261
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAASP.NET вообще-то для веб-морды внедряли. Покажи как мне тех вменяемых разработчиков, кто тебе веб-морду на Delphi в 2004-м писали.Windows-приложения, разумеется. Web тогда не был мэйнстримом в корпоративе.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767262
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Почему не тот, или что-ты подразумеваешь под оперативной системой? :)Толсто тролишь, не понравилось. Ну почему. Как такового определения оперативной системы я не знаю.
Многопользовательская система, система коллективного доступа.

Ну поступают 24/7 в систему данные, обрабатываются. А как наступает отчётный период, так обязательно тут что-то не сходится, там не то.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767263
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА вообще концепция MVC была ещё в 1979 году описана.Я про AJAX, jQuery, TypeScript и прочие клиентские плюшки.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767264
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAASP.NET вообще-то для веб-морды внедряли. Покажи как мне тех вменяемых разработчиков, кто тебе веб-морду на Delphi в 2004-м писали.Windows-приложения, разумеется. Web тогда не был мэйнстримом в корпоративе.В российском корпоративе :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767266
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAА вообще концепция MVC была ещё в 1979 году описана.Я про AJAX, jQuery, TypeScript и прочие клиентские плюшки.IFRAME, Dojo, JavaScript, слышал? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767267
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Толсто тролишь, не понравилось. Ну почему. Как такового определения оперативной системы я не знаю.
Многопользовательская система, система коллективного доступа.

Ну поступают 24/7 в систему данные, обрабатываются. А как наступает отчётный период, так обязательно тут что-то не сходится, там не то.Кроме месячной отчётности в наших системах присутствует организация работы оперативных сотрудников: отображение оперативной информации, различные контроли, поддержка принятия решения и т. п.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767269
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ну почему. Как такового определения оперативной системы я не знаю.
Многопользовательская система, система коллективного доступа.

Ну поступают 24/7 в систему данные, обрабатываются. А как наступает отчётный период, так обязательно тут что-то не сходится, там не то.Кроме месячной отчётности в наших системах присутствует организация работы оперативных сотрудников: отображение оперативной информации, различные контроли, поддержка принятия решения и т. п.И какое решение принимает пользователь, когда видит сообщение об ошибке и стек трейсом?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767270
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завёрнутое в красивый мессадж бокс?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767271
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Я про AJAX, jQuery, TypeScript и прочие клиентские плюшки.IFRAME, Dojo, JavaScript, слышал? :)Да. Нет. Да. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767272
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
IFRAME, Dojo, JavaScript, слышал? :)Да. Нет. Да. :-)Ну вот видишь, всего-то надо было о Dojo узнать, чтобы не ждать 10 лет :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767274
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Кроме месячной отчётности в наших системах присутствует организация работы оперативных сотрудников: отображение оперативной информации, различные контроли, поддержка принятия решения и т. п.И какое решение принимает пользователь, когда видит сообщение об ошибке и стек трейсом?Нужно исправить введённые данные и повторить попытку сохранения? Очевидно ведь, не?

А стектрейс системный администратор отправит разработчикам в случае нештатной ситуации.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767275
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Да. Нет. Да. :-)Ну вот видишь, всего-то надо было о Dojo узнать, чтобы не ждать 10 лет :)Knockout? Bootstrap? TypeScript?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767277
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
И какое решение принимает пользователь, когда видит сообщение об ошибке и стек трейсом?Нужно исправить введённые данные и повторить попытку сохранения? Очевидно ведь, не?

А стектрейс системный администратор отправит разработчикам в случае нештатной ситуации.А если он ввёл пачку данных, то что конкретно исправлять? По одной записи вводить?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767278
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ну вот видишь, всего-то надо было о Dojo узнать, чтобы не ждать 10 лет :)Knockout? Bootstrap? TypeScript?Вопрос(ы) в чём?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767279
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если ошибка не в данных, а в правах доступа, пользователь поймёт это, или будет жать "Сохранить", пока разработчики не ответят админу?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767281
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Нужно исправить введённые данные и повторить попытку сохранения? Очевидно ведь, не?

А стектрейс системный администратор отправит разработчикам в случае нештатной ситуации.А если он ввёл пачку данных, то что конкретно исправлять? По одной записи вводить?Да всё там будет нормально, не переживай. :-)
skyANAА если ошибка не в данных, а в правах доступа, пользователь поймёт это, или будет жать "Сохранить", пока разработчики не ответят админу?Передёргиваешь? Я говорил про нештатную ситуацию, возникла системная, она же "неожиданная" (ц) hVostt, ошибка.

Нет прав - это штатная ситуация с информативным для пользователя сообщением.

Не пойму, какое это имеет отношение к вопросу о том, как пробрасывать ошибку: исключением или результатом методов.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767282
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, то есть шаттные исключительные ситуации всё-таки обрабатываются, а не просто на самый верх пробрасываются в глобальный catch?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767283
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
А если он ввёл пачку данных, то что конкретно исправлять? По одной записи вводить?Да всё там будет нормально, не переживай. :-)Ну да. Куда оператору деваться :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767285
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей К, то есть шаттные исключительные ситуации всё-таки обрабатываются, а не просто на самый верх пробрасываются в глобальный catch?Если нет необходимости обработать по месту, то пробрасываются. Используется специальный класс InfoException. По типу исключения в ExceptionFilterAttribute формируется соответствующий респонз клиенту.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767286
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, а исключения в рамках конкурентного редактирования как обрабатываете?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767287
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей К, а исключения в рамках конкурентного редактирования как обрабатываете?Некоторые системные исключения преобразуются в прикладные, в том числе ошибка оптимистической блокировки, нарушение уникального индекса в БД и т. п.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767288
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КKnockout? Bootstrap? TypeScript?

JavaScript? CSS? JavaScript? Ты из какой берлоги вылез? Или только вчера родился?

А вообще толпа подобной школоты заселившая интернеты жгут:

...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767291
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAАлексей К, а исключения в рамках конкурентного редактирования как обрабатываете?Некоторые системные исключения преобразуются в прикладные, в том числе ошибка оптимистической блокировки, нарушение уникального индекса в БД и т. п.Ну и как обрабатываете-то? Снова мессадж бокс и "Нужно исправить введённые данные и повторить попытку сохранения"?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767292
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Некоторые системные исключения преобразуются в прикладные, в том числе ошибка оптимистической блокировки, нарушение уникального индекса в БД и т. п.Ну и как обрабатываете-то? Снова мессадж бокс и "Нужно исправить введённые данные и повторить попытку сохранения"?

По ходу Алексей просто малость загнался :) Теперь оказывается у него "системные" и "прикладные" исключения
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767293
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КKnockout? Bootstrap? TypeScript?

JavaScript? CSS? JavaScript? Ты из какой берлоги вылез? Или только вчера родился? Knockout: мне просто понравился, можно и без него, конечно, но будет не так приятно как с ним.
Bootstrap: хоть какой-то стандарт для организации UI, без стандарта плохо.
TypeScript: после него на голом JS писать не тянет.

Это ты в какой берлоге сидишь все эти годы.

Я работаю с Web сравнительно недавно, могу смотреть на многие вещи свежим взглядом, в отличие от... Так что поверь, у меня огромное преимущество. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767294
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


JavaScript? CSS? JavaScript? Ты из какой берлоги вылез? Или только вчера родился? Knockout: мне просто понравился, можно и без него, конечно, но будет не так приятно как с ним.
Bootstrap: хоть какой-то стандарт для организации UI, без стандарта плохо.
TypeScript: после него на голом JS писать не тянет.

Это ты в какой берлоге сидишь все эти годы.

Я работаю с Web сравнительно недавно, могу смотреть на многие вещи свежим взглядом, в отличие от... Так что поверь, у меня огромное преимущество. :-)Ну ну, свежий взгляд... От твоих шаблонов веет таким свежим взглядом :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767295
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Некоторые системные исключения преобразуются в прикладные, в том числе ошибка оптимистической блокировки, нарушение уникального индекса в БД и т. п.Ну и как обрабатываете-то? Снова мессадж бокс и "Нужно исправить введённые данные и повторить попытку сохранения"? 16663281

Ну а визуализация полученных данных на клиенте, как мы понимаем, может быть любая.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767298
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ну и как обрабатываете-то? Снова мессадж бокс и "Нужно исправить введённые данные и повторить попытку сохранения"? 16663281

Ну а визуализация полученных данных на клиенте, как мы понимаем, может быть любая.Не понял. То есть системные в прикладные, а прикадные в InfoException, а обработки на клиенте нет?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767299
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAпропущено...
Ну и как обрабатываете-то? Снова мессадж бокс и "Нужно исправить введённые данные и повторить попытку сохранения"?

По ходу Алексей просто малость загнался :) Теперь оказывается у него "системные" и "прикладные" исключения Тебя удивляет анализ типа исключения при его обработке? Неожиданно...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767300
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КKnockout: мне просто понравился, можно и без него, конечно, но будет не так приятно как с ним.

С ним, без него... Формы с биндингом писались даже до появления jQuery и prototype, не говоря уже о нокауте.

Алексей КBootstrap: хоть какой-то стандарт для организации UI, без стандарта плохо.

Какой ещё стандарт? Обычная CSS-сетка с дополнительным набором стилей для некоторых компонентов и совсем немного скриптов в комплекте. Такие сетки существовали далеко задолго до бутстрапа, и сегодня их великое множество. Никакой это не стандарт, просто популярная сетка.

Алексей КTypeScript: после него на голом JS писать не тянет.

Да пофигу, на выходе всё равно JavaScript и большего чем позволяет JavaScript на TypeScripte достигнуть нельзя.

Алексей КЭто ты в какой берлоге сидишь все эти годы.

Ты зациклился на KO+BS+TS и всё. Это весь твой мир. Похоже ты из берлоги и не вылазишь, просто дёрнул из "внешнего мира" первое что попалось и сидишь мусолишь. Выходи из судорга

Алексей КЯ работаю с Web сравнительно недавно, могу смотреть на многие вещи свежим взглядом, в отличие от... Так что поверь, у меня огромное преимущество. :-)

Какой ещё "свежий взгляд"? Какое преимущество? ахаахаах аж прослезился
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767301
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
16663281

Ну а визуализация полученных данных на клиенте, как мы понимаем, может быть любая.Не понял. То есть системные в прикладные, а прикадные в InfoException, а обработки на клиенте нет?На клиенте анализ AJAX-респонза, или ты о чём?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767302
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТебя удивляет анализ типа исключения при его обработке? Неожиданно...

Как раз меня ничего не удивляет, я вижу что ты как уж на сковородке вертишься. Сначала нам парил, что дескать не надо обрабатывать исключения по месту, а теперь выясняется, что некоторые всё таки надо. Ты если так по-глупому загоняешься, так придерживайся одной линии, иди до конца так сказать
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767303
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КKnockout: мне просто понравился, можно и без него, конечно, но будет не так приятно как с ним.

С ним, без него... Формы с биндингом писались даже до появления jQuery и prototype, не говоря уже о нокауте.Подписка на события и биндинг немного разные вещи.

hVosttАлексей КBootstrap: хоть какой-то стандарт для организации UI, без стандарта плохо.

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

hVosttАлексей КTypeScript: после него на голом JS писать не тянет.

Да пофигу, на выходе всё равно JavaScript и большего чем позволяет JavaScript на TypeScripte достигнуть нельзя.Ты не пишешь клиентский код, поэтому тебе пофигу.

hVosttАлексей КЭто ты в какой берлоге сидишь все эти годы.

Ты зациклился на KO+BS+TS и всё. Это весь твой мир. Похоже ты из берлоги и не вылазишь, просто дёрнул из "внешнего мира" первое что попалось и сидишь мусолишь. Выходи из судорга Я выбрал технологический стек для моих текущих проектов, он меня устраивает. В настоящее время мне больше ничего не надо.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767305
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Алексей КТебя удивляет анализ типа исключения при его обработке? Неожиданно...

Как раз меня ничего не удивляет, я вижу что ты как уж на сковородке вертишься. Сначала нам парил, что дескать не надо обрабатывать исключения по месту, а теперь выясняется, что некоторые всё таки надо. Ты если так по-глупому загоняешься, так придерживайся одной линии, иди до конца так сказать По какому месту? Тебе в третий раз произнести про ExceptionFilterAttribute ?

На этом предлагаю остановиться, скучно с вами...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767307
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПо какому месту? Тебе в третий раз произнести про ExceptionFilterAttribute ?

Это единственное место, где ты ловишь исключения? В твоём коде нет ни одного try/catch?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767308
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Не понял. То есть системные в прикладные, а прикадные в InfoException, а обработки на клиенте нет?На клиенте анализ AJAX-респонза, или ты о чём?А можешь привести пример кода этого анализа? Хочется понять, что такое "визуализация полученных данных на клиенте, как мы понимаем, может быть любая".

А публичная часть системы у вас есть? Ну то есть куда не надо логинится и можно зайти с мобилы например не из корпоративной сетки?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767310
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КПо какому месту? Тебе в третий раз произнести про ExceptionFilterAttribute ?

Это единственное место, где ты ловишь исключения? В твоём коде нет ни одного try/catch?Ну ты сам-то как думаешь?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767313
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVostt пропущено...


Как раз меня ничего не удивляет, я вижу что ты как уж на сковородке вертишься. Сначала нам парил, что дескать не надо обрабатывать исключения по месту, а теперь выясняется, что некоторые всё таки надо. Ты если так по-глупому загоняешься, так придерживайся одной линии, иди до конца так сказать По какому месту? Тебе в третий раз произнести про ExceptionFilterAttribute ?

На этом предлагаю остановиться, скучно с вами...Ну вообще-то перехват определённого типа исключения и оборачивание их в свои с добавлением дополнительной информации и наверняка каким-то форматированием - это обработка :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767315
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь становится понятно, почему ты так поправил моё утверждение: "Ловить надо там, где есть возможность необходимость обработать!" ( 16657561 ).

Ну да... Необходимо же под реализацию ExceptionFilterAttribute подстраиваться :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767316
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
На клиенте анализ AJAX-респонза, или ты о чём?А можешь привести пример кода этого анализа? Хочется понять, что такое "визуализация полученных данных на клиенте, как мы понимаем, может быть любая".
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
        invoke(url: string, settings?: JQueryAjaxSettings): JQueryPromise<any> {
            var result: JQueryPromise<any> = $.ajax(ssp.url.getAppUrl(url), settings);

            if (this.isLockUi)
                result = uiLocker.setPromise(result);

            if (this.isLogErrors)
                result = result.fail(r => { ajaxResponseParser.logErrors(r); });

            return result;
        }

////////////////////////////////////////////////////////////////////////

    export class AjaxResponseParser {
        logErrors(response) {
            var logEntries = this.getLogEntries(response);
            $.each(logEntries, (i, v) => { log.add(v); });
        }

        getLogEntries(response): ILogEntry[] {
            var result: ILogEntry[];

            var isLogEntriesInResponse =
                $.isArray(response.responseJSON) &&
                response.responseJSON.length > 0 &&
                $.type(response.responseJSON[0].Type) == "number" &&
                $.type(response.responseJSON[0].Message) == "string";

            if (response.status == 400 && isLogEntriesInResponse) {
                return <ILogEntry[]>response.responseJSON;
            } else if (response.status == 401) {
                return [{
                    Type: LogEntryTypes.Info,
                    Message: "Пользователь не имеет прав на выполнение операции."
                }];
            } else {
                var responseClone = data.clone(response);

                if (responseClone.responseJSON)
                    responseClone.responseText = undefined;

                return [{
                    Type: LogEntryTypes.Error,
                    Message: "Неизвестная ошибка.",
                    Description: JSON.stringify(responseClone)
                }];
            }
        }
    }

skyANAА публичная часть системы у вас есть? Ну то есть куда не надо логинится и можно зайти с мобилы например не из корпоративной сетки?Доступа из интернета к системе не планируется, но поддержка работы через "мобилу", думаю, будет.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767317
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Это единственное место, где ты ловишь исключения? В твоём коде нет ни одного try/catch?Ну ты сам-то как думаешь?

Я спрашиваю. Ответить можешь?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767319
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
По какому месту? Тебе в третий раз произнести про ExceptionFilterAttribute ?

На этом предлагаю остановиться, скучно с вами...Ну вообще-то перехват определённого типа исключения и оборачивание их в свои с добавлением дополнительной информации и наверняка каким-то форматированием - это обработка :)Ну а где я утверждал, что try...catch в программе запрещены? Тебя hVostt что ли укусил?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767321
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Ну ты сам-то как думаешь?

Я спрашиваю. Ответить можешь?Странный вопрос, впрочем, да, есть.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767326
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
А можешь привести пример кода этого анализа? Хочется понять, что такое "визуализация полученных данных на клиенте, как мы понимаем, может быть любая".
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
        invoke(url: string, settings?: JQueryAjaxSettings): JQueryPromise<any> {
            var result: JQueryPromise<any> = $.ajax(ssp.url.getAppUrl(url), settings);

            if (this.isLockUi)
                result = uiLocker.setPromise(result);

            if (this.isLogErrors)
                result = result.fail(r => { ajaxResponseParser.logErrors(r); });

            return result;
        }

////////////////////////////////////////////////////////////////////////

    export class AjaxResponseParser {
        logErrors(response) {
            var logEntries = this.getLogEntries(response);
            $.each(logEntries, (i, v) => { log.add(v); });
        }

        getLogEntries(response): ILogEntry[] {
            var result: ILogEntry[];

            var isLogEntriesInResponse =
                $.isArray(response.responseJSON) &&
                response.responseJSON.length > 0 &&
                $.type(response.responseJSON[0].Type) == "number" &&
                $.type(response.responseJSON[0].Message) == "string";

            if (response.status == 400 && isLogEntriesInResponse) {
                return <ILogEntry[]>response.responseJSON;
            } else if (response.status == 401) {
                return [{
                    Type: LogEntryTypes.Info,
                    Message: "Пользователь не имеет прав на выполнение операции."
                }];
            } else {
                var responseClone = data.clone(response);

                if (responseClone.responseJSON)
                    responseClone.responseText = undefined;

                return [{
                    Type: LogEntryTypes.Error,
                    Message: "Неизвестная ошибка.",
                    Description: JSON.stringify(responseClone)
                }];
            }
        }
    }

skyANAА публичная часть системы у вас есть? Ну то есть куда не надо логинится и можно зайти с мобилы например не из корпоративной сетки?Доступа из интернета к системе не планируется, но поддержка работы через "мобилу", думаю, будет.Что такое log и как он используется для "визуализации полученных данных на клиенте"?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767330
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
        invoke(url: string, settings?: JQueryAjaxSettings): JQueryPromise<any> {
            var result: JQueryPromise<any> = $.ajax(ssp.url.getAppUrl(url), settings);

            if (this.isLockUi)
                result = uiLocker.setPromise(result);

            if (this.isLogErrors)
                result = result.fail(r => { ajaxResponseParser.logErrors(r); });

            return result;
        }

////////////////////////////////////////////////////////////////////////

    export class AjaxResponseParser {
        logErrors(response) {
            var logEntries = this.getLogEntries(response);
            $.each(logEntries, (i, v) => { log.add(v); });
        }

        getLogEntries(response): ILogEntry[] {
            var result: ILogEntry[];

            var isLogEntriesInResponse =
                $.isArray(response.responseJSON) &&
                response.responseJSON.length > 0 &&
                $.type(response.responseJSON[0].Type) == "number" &&
                $.type(response.responseJSON[0].Message) == "string";

            if (response.status == 400 && isLogEntriesInResponse) {
                return <ILogEntry[]>response.responseJSON;
            } else if (response.status == 401) {
                return [{
                    Type: LogEntryTypes.Info,
                    Message: "Пользователь не имеет прав на выполнение операции."
                }];
            } else {
                var responseClone = data.clone(response);

                if (responseClone.responseJSON)
                    responseClone.responseText = undefined;

                return [{
                    Type: LogEntryTypes.Error,
                    Message: "Неизвестная ошибка.",
                    Description: JSON.stringify(responseClone)
                }];
            }
        }
    }

пропущено...
Доступа из интернета к системе не планируется, но поддержка работы через "мобилу", думаю, будет.Что такое log и как он используется для "визуализации полученных данных на клиенте"?В нём отображается MessageBox, сделанный через Bootstrap-ный modal.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767331
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ну вообще-то перехват определённого типа исключения и оборачивание их в свои с добавлением дополнительной информации и наверняка каким-то форматированием - это обработка :)Ну а где я утверждал, что try...catch в программе запрещены? Тебя hVostt что ли укусил? Ну где, где... Вот: 16657497 :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767332
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну а где я утверждал, что try...catch в программе запрещены? Тебя hVostt что ли укусил? Ну где, где... Вот: 16657497 :)Ну это же не запрещает, если надо. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767333
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Что такое log и как он используется для "визуализации полученных данных на клиенте"?В нём отображается MessageBox, сделанный через Bootstrap-ный modal.А если я хочу не MessageBox, а другое поведение?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767334
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
В нём отображается MessageBox, сделанный через Bootstrap-ный modal.А если я хочу не MessageBox, а другое поведение?Очевидно, придётся переписать содержимое класса Log. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767335
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ну где, где... Вот: 16657497 :)Ну это же не запрещает, если надо. :-)Ахаха, Алексей в своём репертуаре.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767336
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
А если я хочу не MessageBox, а другое поведение?Очевидно, придётся переписать содержимое класса Log. :-)Переписать? Как всё запущено.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767337
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"визуализация полученных данных на клиенте, как мы понимаем, может быть любая", если переписать...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767338
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
свежий взгляд, чо
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767339
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Очевидно, придётся переписать содержимое класса Log. :-)Переписать? Как всё запущено.А как надо? Чтобы оно само написалось?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767344
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Переписать? Как всё запущено.А как надо? Чтобы оно само написалось? Ну хотелось бы как-то гибко в зависимости от модели прозрачно использовать ту, или иную реализацию.
А не либо MessageBox, либо переписать :)

И не хотелось, чтобы response parser вообще что-то знал о UI.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767353
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
А как надо? Чтобы оно само написалось? Ну хотелось бы как-то гибко в зависимости от модели прозрачно использовать ту, или иную реализацию.
А не либо MessageBox, либо переписать :)Надо будет - сделаем. Пока не надо.

skyANAИ не хотелось, чтобы response parser вообще что-то знал о UI.Он про UI ничего и не знает. Он знает только про класс Log, который в любой момент может стать интерфейсом, внутри класса Log можно сделать через IoC механизм хранилищ - тут много способов решения. Главное, что абстракция в виде класса Log есть, остальное всё разрулится по мере необходимости.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767355
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Я спрашиваю. Ответить можешь?Странный вопрос, впрочем, да, есть.

Зачем, если есть ExceptionFilterAttribute?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767360
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Странный вопрос, впрочем, да, есть.

Зачем, если есть ExceptionFilterAttribute?Чтобы обрабатывать по месту при необходимости. Впрочем, чаще есть необходимость генерации исключения:
Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}

Вот она, ошибка прикладного уровня, которая стала для некоторых открытием.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767363
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Странный вопрос, впрочем, да, есть.

Зачем, если есть ExceptionFilterAttribute?Вдогонку: я оперирую понятиями "чаще" и "реже", а не "бывает" и "не бывает", как некоторым хотелось бы. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767379
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Ну хотелось бы как-то гибко в зависимости от модели прозрачно использовать ту, или иную реализацию.
А не либо MessageBox, либо переписать :)Надо будет - сделаем. Пока не надо.

skyANAИ не хотелось, чтобы response parser вообще что-то знал о UI.Он про UI ничего и не знает. Он знает только про класс Log, который в любой момент может стать интерфейсом, внутри класса Log можно сделать через IoC механизм хранилищ - тут много способов решения. Главное, что абстракция в виде класса Log есть, остальное всё разрулится по мере необходимости.Да, да, да... "придётся переписать"
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767382
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Зачем, если есть ExceptionFilterAttribute?Чтобы обрабатывать по месту при необходимости. Впрочем, чаще есть необходимость генерации исключения:
Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}

Вот она, ошибка прикладного уровня, которая стала для некоторых открытием.И в чём смысл такого InfoException? Чисто чтобы в фильтре по типу отличить?

Хорошо вам в корпоративе. Не надо о локализации думать и о том, что неплохо бы данные какие добавить, validatione rule к примеру, который был нарушен.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767383
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, а вот если не пользователь, а сервис запулит пачку данных, среди которых будет парочка невалидных объектов, то он также цинично будет послан на фиг: "Нельзя A больше B. До свидания!"?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767406
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЧтобы обрабатывать по месту при необходимости. Впрочем, чаще есть необходимость генерации исключения:
Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}


Вот она, ошибка прикладного уровня, которая стала для некоторых открытием.

На кой хер использовать исключения для реализации прикладной логики? Мало того, так делать -- это отвратительный, мерзкий тон, так ещё и путаешь людей, которые могут сопровождать этот код: ведь оказывается InfoException это вовсе не ошибка, а контейнер для проброса сообщения "наверх". Фу-фу-фу. Можешь считать, что это норм, но, как говориться, писать тухлый говнокод не запретишь. Селяви. А то мозг тут нам выносил, теперь-то всё понятно
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767407
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ в чём смысл такого InfoException? Чисто чтобы в фильтре по типу отличить?

Об этом уже Рихтер писал не однократно. Новички и неопытные сопливые программисты часто пытаются заюзать исключение, как контейнер для проброса информации сквозь слои инфраструктуры, ведь зачем использовать мозг и творить внятную архитектуру? Говорилось миру не однократно, это касается не только C#, но и С++ и Java и других платформ: не используйте исключения для реализации логики, как контейнер для переноса информационных сообщений, как способ для сообщений "сквозь слои", это средство для обработки ошибок, но не для логики (абсолютно не важно какого уровня, топ или лоу). Всякие InfoException -- это просто курам на смех. Вот находятся же умники...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767460
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAИ в чём смысл такого InfoException? Чисто чтобы в фильтре по типу отличить?

Об этом уже Рихтер писал не однократно. Новички и неопытные сопливые программисты часто пытаются заюзать исключение, как контейнер для проброса информации сквозь слои инфраструктуры, ведь зачем использовать мозг и творить внятную архитектуру? Говорилось миру не однократно, это касается не только C#, но и С++ и Java и других платформ: не используйте исключения для реализации логики, как контейнер для переноса информационных сообщений, как способ для сообщений "сквозь слои", это средство для обработки ошибок, но не для логики (абсолютно не важно какого уровня, топ или лоу). Всякие InfoException -- это просто курам на смех. Вот находятся же умники...Теперь давай список негативных эффектов от предлагаемого решения, конкретно, по пунктам.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767462
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Чтобы обрабатывать по месту при необходимости. Впрочем, чаще есть необходимость генерации исключения:
Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}

Вот она, ошибка прикладного уровня, которая стала для некоторых открытием.И в чём смысл такого InfoException? Чисто чтобы в фильтре по типу отличить?Да.
skyANAХорошо вам в корпоративе. Не надо о локализации думатьВместо строковой константы в исключении указать ID сообщения конечно-же сложно.
skyANAи о том, что неплохо бы данные какие добавить, validatione rule к примеру, который был нарушен.Добавить свойств к классу исключения тоже можно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767464
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей К, а вот если не пользователь, а сервис запулит пачку данных, среди которых будет парочка невалидных объектов, то он также цинично будет послан на фиг: "Нельзя A больше B. До свидания!"?Всё зависит от технического задания. Очевидно, логику можно написать как угодно. Если речь идёт о сохранении не в одной транзакции, соглашусь, результат, наверное, лучше вернуть не исключением.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767490
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТеперь давай список негативных эффектов от предлагаемого решения, конкретно, по пунктам.

Проверка данных на корректность решается с помощью механизмов валидации, коих что ASP.NET MVC, что в ASP.NET WebAPI навалено плотной кучей, также легко и непринуждённо прибивается к JavaScript, и даже к твоему любимому knockout.

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

Что ещё? Нарушения целостности данных, например, дублирование уникального индекса поля должно решаться валидацией, а не исключением. Арифметические выражения, и деления на нуль -- валидация. Загрузка неправильных файлов и изображений -- валидация. И т.д.

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

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


Вот ещё пример.

Пользователь жмёт на чужой комментарий "Ответить", и долго, вдумчиво выплёскивает то, что у него накопилось к оппоненту. Но в это время оппонент решил, что человечество к его комментарию пока ещё не готово и удаляет своё творение. Пользователь жмёт "Отправить" и... получает матюки в ответ, дескать ты чё такой тупой, пытаешься отвечать на удалённые комментарии. Хотя можно было предложить пользователю создать новый комментарий с отправленным текстом вместо ответа или сохранить в черновики, или отправить личное сообщение... Это невозможно никак сделать с твоим подходом. Никак. Ошибки надо ловить там где их можно (и нужно) обработать. А не рисовать некий универсальный подход, которым можно только задницу подтереть.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767559
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КhVosttпропущено...
Зачем, если есть ExceptionFilterAttribute?Вдогонку: я оперирую понятиями "чаще" и "реже", а не "бывает" и "не бывает", как некоторым хотелось бы. :-)
За такое нужно минимум ведро на голову одень, взять палочки и начать барабанить по ведру
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767570
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КТеперь давай список негативных эффектов от предлагаемого решения, конкретно, по пунктам.
Самый жирный гвоздь в твоё изобретение - нерасширяемое решение, которое нельзя ни с чем интегрировать. Нужно будет писать всяческие обертки и костыли для трансляции твоего исключения во внятный вид и для каждого случая. Тот же unobtrusive уже идет лесом. Для таких телодвижений есть универсальные IDataErrorInfo и IValidatableObject, которые можно использовать хоть в сильверлайте космосе. И самое главное - ты всеми будешь понят и распознан, не надо ничего писать в нагрузку.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767601
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКнопочки дисейблятся или скрываются, чекбоксы, радиобатоны, группы контролов, ссылки, поля и другие неведыме штуковины не должны давать пользователю нарваться на истеричный мат.Типичная ошибка профессионального дилетанта в области UI: кнопочка задизейблена, пользователь сидит в обнимку с хрустальным шаром и гадает, почему кнопка недоступна. Так нужно делать только в самых очевидных случаях, которых не много.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767602
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей КТеперь давай список негативных эффектов от предлагаемого решения, конкретно, по пунктам.
Самый жирный гвоздь в твоё изобретение - нерасширяемое решение, которое нельзя ни с чем интегрировать. Нужно будет писать всяческие обертки и костыли для трансляции твоего исключения во внятный вид и для каждого случая. Тот же unobtrusive уже идет лесом. Для таких телодвижений есть универсальные IDataErrorInfo и IValidatableObject, которые можно использовать хоть в сильверлайте космосе. И самое главное - ты всеми будешь понят и распознан, не надо ничего писать в нагрузку.Причём тут валидация в UI на клиенте? Мы не об этом сейчас.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767604
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВот ещё пример.

Пользователь жмёт на чужой комментарий "Ответить", и долго, вдумчиво выплёскивает то, что у него накопилось к оппоненту. Но в это время оппонент решил, что человечество к его комментарию пока ещё не готово и удаляет своё творение. Пользователь жмёт "Отправить" и... получает матюки в ответ, дескать ты чё такой тупой, пытаешься отвечать на удалённые комментарии. Хотя можно было предложить пользователю создать новый комментарий с отправленным текстом вместо ответа или сохранить в черновики, или отправить личное сообщение... Это невозможно никак сделать с твоим подходом. Никак. Ошибки надо ловить там где их можно (и нужно) обработать. А не рисовать некий универсальный подход, которым можно только задницу подтереть.Ну с чего ты взял, что это невозможно? Всё возможно, просто ты не знаешь как. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767606
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAХорошо вам в корпоративе. Не надо о локализации думатьВместо строковой константы в исключении указать ID сообщения конечно-же сложно.Какой ещё ID? Вы с локализацией не сталкивались ещё?
Алексей КskyANAи о том, что неплохо бы данные какие добавить, validatione rule к примеру, который был нарушен.Добавить свойств к классу исключения тоже можно.Когда? Через год, два? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767646
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТипичная ошибка профессионального дилетанта в области UI: кнопочка задизейблена, пользователь сидит в обнимку с хрустальным шаром и гадает, почему кнопка недоступна. Так нужно делать только в самых очевидных случаях, которых не много.

Про всплывающие подсказки видимо ты не слышал?

Ну не смеши тапки Ленина хоть!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767650
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttВот ещё пример.

Пользователь жмёт на чужой комментарий "Ответить", и долго, вдумчиво выплёскивает то, что у него накопилось к оппоненту. Но в это время оппонент решил, что человечество к его комментарию пока ещё не готово и удаляет своё творение. Пользователь жмёт "Отправить" и... получает матюки в ответ, дескать ты чё такой тупой, пытаешься отвечать на удалённые комментарии. Хотя можно было предложить пользователю создать новый комментарий с отправленным текстом вместо ответа или сохранить в черновики, или отправить личное сообщение... Это невозможно никак сделать с твоим подходом. Никак. Ошибки надо ловить там где их можно (и нужно) обработать. А не рисовать некий универсальный подход, которым можно только задницу подтереть.Ну с чего ты взял, что это невозможно? Всё возможно, просто ты не знаешь как. :-)

Ну да. Вот едешь ты на велике, и тут раз -- поворот. В твоей версии ты падаешь, размазываешь себе руки-ноги в кровь, говоришь обёрнутое в InfoException «Блееааать... поворот....», поднимаешься, поворачиваешь велик в нужную сторону, садишься и едешь дальше. Отлично, чо
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38767933
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КПричём тут валидация в UI на клиенте? Мы не об этом сейчас.
Если понадобится. UI или не UI - не суть важно.

Вот этот мрак

Алексей К
Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}



и есть самое что ни на есть валидация. А где и кому она нужна, вторично. Бросаться вот так исключениями - предел беспринципности и ультрарадикализма
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768070
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПро всплывающие подсказки видимо ты не слышал? Хинты на невидимой кнопке, ага.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768089
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruВот этот мрак

Алексей К
Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}



и есть самое что ни на есть валидация. А где и кому она нужна, вторично. Бросаться вот так исключениями - предел беспринципности и ультрарадикализма Лучше, ага:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SaveResult Save(Data data)
{
    SaveResult r;

    r = Save1(data.D1);
    if (!r.IsValid)
        return r;

    r = Save2(data.D2);
    if (!r.IsValid)
        return r;

    r = Save3(data.D3);
    if (!r.IsValid)
        return r;

    return SaveResult.Valid;
}

Так держать! Молодцы!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768101
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Кcodearticles.ruВот этот мрак

пропущено...


и есть самое что ни на есть валидация. А где и кому она нужна, вторично. Бросаться вот так исключениями - предел беспринципности и ультрарадикализма Лучше, ага:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SaveResult Save(Data data)
{
    SaveResult r;

    r = Save1(data.D1);
    if (!r.IsValid)
        return r;

    r = Save2(data.D2);
    if (!r.IsValid)
        return r;

    r = Save3(data.D3);
    if (!r.IsValid)
        return r;

    return SaveResult.Valid;
}

Так держать! Молодцы!

Что за очередной слив дезы, бро? Я давеча рассказывал про пряморукие методы типа нативных IValidatableObject.Validate Чем не водка?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768123
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttПро всплывающие подсказки видимо ты не слышал? Хинты на невидимой кнопке, ага.Ахаха. Вы уж определитесь hidden или disabled элементы обсуждаете.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768127
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кcodearticles.ruВот этот мрак

пропущено...


и есть самое что ни на есть валидация. А где и кому она нужна, вторично. Бросаться вот так исключениями - предел беспринципности и ультрарадикализма Лучше, ага:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SaveResult Save(Data data)
{
    SaveResult r;

    r = Save1(data.D1);
    if (!r.IsValid)
        return r;

    r = Save2(data.D2);
    if (!r.IsValid)
        return r;

    r = Save3(data.D3);
    if (!r.IsValid)
        return r;

    return SaveResult.Valid;
}

Так держать! Молодцы!Откуда этот говнокод?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768296
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttПро всплывающие подсказки видимо ты не слышал? Хинты на невидимой кнопке, ага.

а зачем хинт на невидимой кнопке? нет кнопки, нет проблем. ты же недавно только бузил по поводу того, что пользователь будет недоволен задисейбелнными контролами, речь шла о них. или ты чего там куришь?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768311
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Хинты на невидимой кнопке, ага.Ахаха. Вы уж определитесь hidden или disabled элементы обсуждаете.Или серверную логику...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768312
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Лучше, ага:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SaveResult Save(Data data)
{
    SaveResult r;

    r = Save1(data.D1);
    if (!r.IsValid)
        return r;

    r = Save2(data.D2);
    if (!r.IsValid)
        return r;

    r = Save3(data.D3);
    if (!r.IsValid)
        return r;

    return SaveResult.Valid;
}

Так держать! Молодцы!Откуда этот говнокод? Лютый код от нелюбителей исключений.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768314
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа зачем хинт на невидимой кнопке?Да всё, не зачем, забудь.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768326
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttа зачем хинт на невидимой кнопке?Да всё, не зачем, забудь.

Эт видимо какой-то новый способ вести дискуссию, можно нести что попало, потом тупо слить. Ну ок, уже забыл.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768333
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Да всё, не зачем, забудь.

Эт видимо какой-то новый способ вести дискуссию, можно нести что попало, потом тупо слить. Ну ок, уже забыл.Ну мы ведь не хинты на кнопках обсуждаем, не так ли?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768336
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Лучше, ага:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SaveResult Save(Data data)
{
    SaveResult r;

    r = Save1(data.D1);
    if (!r.IsValid)
        return r;

    r = Save2(data.D2);
    if (!r.IsValid)
        return r;

    r = Save3(data.D3);
    if (!r.IsValid)
        return r;

    return SaveResult.Valid;
}

Так держать! Молодцы!Откуда этот говнокод? Более того, Рихтер так делает, если hVostt ничего не путает .
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768349
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Откуда этот говнокод? Лютый код от нелюбителей исключений.А конкретнее? Ты его выдумал что-ли?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38768353
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Лютый код от нелюбителей исключений.А конкретнее? Ты его выдумал что-ли?Да.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770944
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, позвольте вмешаться в вашу оживленную дискуссию.

Код: c#
1.
2.
3.
4.
5.
void ValidateEntity(Entity entity)
{
    if (entity.A > entity.B)
        throw new InfoException("Нельзя A больше B. До свидания!");
}



А как надо? Полностью согласен с необходимостью валидации на клиенте, но ведь бизнес-логику может дернуть (в теории) вообще кто угодно. Да хоть пользователь-мерзавец вручную составил запрос. И так получилось, что entity.A > entity.B. Как быть?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770952
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzА как надо? Полностью согласен с необходимостью валидации на клиенте, но ведь бизнес-логику может дернуть (в теории) вообще кто угодно. Да хоть пользователь-мерзавец вручную составил запрос. И так получилось, что entity.A > entity.B. Как быть?

Давай пока оставим бизнес-логику в покое. Возьмём пример по-проще.

var result = Model.A / Model.B;

Что делать? Ловить-оборачивать исключения или проверять Model.B на ноль перед выполнением операции? М?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770959
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я за то, чтобы проверить. Проверили, получили ноль. Что делаем дальше?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770962
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzЯ за то, чтобы проверить. Проверили, получили ноль. Что делаем дальше?

Даём возможность пользователю исправить 0 на что-нибудь другое. Подсвечиваем конкретное поле, где пользователь "не прав". Может быть даже обойтись и без этого, если логика допускает, при Model.B == 0, сразу записать в result 0. А что делать и "информационным" исключением? Тынкуть пользователя в него мордой?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770967
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так проверку мы где делаем, в бизнес-логике? А как сказать контроллеру, что проверка не удалась? Чтобы он как раз и подсветил поле красненьким для пользователя.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770994
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzТак проверку мы где делаем, в бизнес-логике? А как сказать контроллеру, что проверка не удалась? Чтобы он как раз и подсветил поле красненьким для пользователя.

Проверка делается на уровне модели. Т.е. за пределами бизнес-логики. Для валидации должны быть предоставлены необходимые для этого инструменты.

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

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

Уточню, вью-модели.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770997
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, подход хороший, но тогда получается, что проверку внутри бизнес-логики вообще не делаем, предполагая, что не можем получить невалидные данные на вход?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38770998
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzА как сказать контроллеру, что проверка не удалась?

На счёт того "как сказать", ASP.NET MVC/WebAPI предлагает такое понятие, как ModelState, там есть свойство IsValid, и там же наименования полей и дополнительные подробности. Валидация, биндинг, провайдер значений, всё это существует отдельно, точка сборки -- контроллер (поэтому у него и такое название). При необходимости компоненты обращаются к бизнес-логике. Сама бизнес-логика обязательно внутри должна делать повторную валидацию. Но в целом подразумевается, что в БЛ заталкиваются уже валидные данные, а невалидные данные -- это исключительные ситуации, которые надо лечить.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771001
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzно тогда получается, что проверку внутри бизнес-логики вообще не делаем, предполагая, что не можем получить невалидные данные на вход?

Обязательно делаем. И если что-то невалидное, бросаем исключение. Но эта ситуация должна исправляться, чтобы такого небыло. Это дополнительный уровень защиты для нештатных ситуаций.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771018
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, спасибо!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771098
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttzzно тогда получается, что проверку внутри бизнес-логики вообще не делаем, предполагая, что не можем получить невалидные данные на вход?Обязательно делаем. И если что-то невалидное, бросаем исключение.Определись уже, делаем или не делаем, а то твоя слабая позиция мало понятна.
hVosttНо эта ситуация должна исправляться, чтобы такого небыло. Это дополнительный уровень защиты для нештатных ситуаций.Это основная бизнес-логика системы. Валидация на клиенте - это необязательные бантики, которые ещё и не всегда можно сделать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771099
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttzzА как надо? Полностью согласен с необходимостью валидации на клиенте, но ведь бизнес-логику может дернуть (в теории) вообще кто угодно. Да хоть пользователь-мерзавец вручную составил запрос. И так получилось, что entity.A > entity.B. Как быть?

Давай пока оставим бизнес-логику в покое. Возьмём пример по-проще.

var result = Model.A / Model.B;

Что делать? Ловить-оборачивать исключения или проверять Model.B на ноль перед выполнением операции? М?
Код: c#
1.
2.
3.
4.
if (model.B == 0)
    throw new InfoException("Ввёл ноль - деления не будет!");

var result = Model.A / Model.B;
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771254
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО валидация - это отдельный от бизнес-логики контур.
И с точки зрения SOLID должен инкапсулироваться отдельным набором интерфейсов и классов.

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

Пример: данные в базу может вносить пользователь через десктоп интерфейс, но также они могут прилетать пачками в наш сервис из сторонней системы.

Причём пользователь
а. может не иметь прав на редактирование всех атрибутов;
б. может вводить данные частично (черновик), остаток вводить потом, или передавать другому пользователю(ям) с большими правами и т.п.;
в. контролы уже ограничивают ввод по длине, маске, типу и проверять нужно только то, что обязательные поля заполнены.

А сервис принимает уже окончательные данные, подготовленные в сторонней системе.
Должен проверить каждый элемент в пачке (все атрибуты заполнены, значения корректные, длины строк не превышают максимума и т.п.) и выдать в ответ, что из 100 элементов 98 Accepted, а 2 Rejected с описанием из-за чего.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771255
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, а для тебя придумали System.Diagnostics.Contracts

Код: c#
1.
2.
3.
4.
5.
[ContractInvariantMethod]
protected void ObjectInvariant()
{
    Contract.Invariant(this.B != 0);
}
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771306
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostthVosttПроверка делается на уровне модели.
Уточню, вью-модели.
Правильнее таки модели, у нас же MVC. А что, что твоя модель по сути вью-модель, не суть важно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771312
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИМХО валидация - это отдельный от бизнес-логики контур.
И с точки зрения SOLID должен инкапсулироваться отдельным набором интерфейсов и классов.

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

Пример: данные в базу может вносить пользователь через десктоп интерфейс, но также они могут прилетать пачками в наш сервис из сторонней системы.

Причём пользователь
а. может не иметь прав на редактирование всех атрибутов;
б. может вводить данные частично (черновик), остаток вводить потом, или передавать другому пользователю(ям) с большими правами и т.п.;
в. контролы уже ограничивают ввод по длине, маске, типу и проверять нужно только то, что обязательные поля заполнены.++
skyANAА сервис принимает уже окончательные данные, подготовленные в сторонней системе.
Должен проверить каждый элемент в пачке (все атрибуты заполнены, значения корректные, длины строк не превышают максимума и т.п.)Собственно, это и обсуждается: как пробрасывать ошибку внутри слоёв сервиса и как передать ошибку от сервиса к клиенту.
skyANA... и выдать в ответ, что из 100 элементов 98 Accepted, а 2 Rejected с описанием из-за чего.Ну это уже конкретная ситуация, на мой взгляд, не частая. Чаще сохранение данных происходит в одной транзакции, во всяком случае у меня.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771313
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИМХО валидация - это отдельный от бизнес-логики контур
Начинается... Любители декомпозиции взяли пулемёт. Валидация - это такая же бизнес логика, ничего накручивать не надо. Бери готовый IValidatableObject и хоть в припляс с ним танцуй и инжекть.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771315
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей К, а для тебя придумали System.Diagnostics.Contracts

Код: c#
1.
2.
3.
4.
5.
[ContractInvariantMethod]
protected void ObjectInvariant()
{
    Contract.Invariant(this.B != 0);
}

Не нравится.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771317
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruВалидация - это такая же бизнес логика.Бизнес-логика на клиенте, ага. Клиентская валидация - это обычно необязательный бантик для удобства пользователя.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771333
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAАлексей К, а для тебя придумали System.Diagnostics.Contracts

Код: c#
1.
2.
3.
4.
5.
[ContractInvariantMethod]
protected void ObjectInvariant()
{
    Contract.Invariant(this.B != 0);
}

Не нравится.Чем? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771335
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAИМХО валидация - это отдельный от бизнес-логики контур
Начинается... Любители декомпозиции взяли пулемёт. Валидация - это такая же бизнес логика, ничего накручивать не надо. Бери готовый IValidatableObject и хоть в припляс с ним танцуй и инжекть.И что в нём готового? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771341
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, и ответь на вопрос: зачем в метод Validate передаётся ValidationContext? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771363
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANA... и выдать в ответ, что из 100 элементов 98 Accepted, а 2 Rejected с описанием из-за чего.Ну это уже конкретная ситуация, на мой взгляд, не частая. Чаще сохранение данных происходит в одной транзакции, во всяком случае у меня.При чём тут вообще транзакции? В вашей оперативной системе пользователь долго и упорно набивает 100 записей и потом разом их сохраняет?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771402
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну это уже конкретная ситуация, на мой взгляд, не частая. Чаще сохранение данных происходит в одной транзакции, во всяком случае у меня.При чём тут вообще транзакции? В вашей оперативной системе пользователь долго и упорно набивает 100 записей и потом разом их сохраняет?На каждую запись, которая может содержать вложенные записи, обычно отдельная форма редактирования с сохранением в одной транзакции.

Транзакции при том, что сохраняется всё или ничего, поэтому сообщение "98 Accepted, а 2 Rejected" - это другой случай для нас достаточно редкий.
skyANAАлексей Кпропущено...
Не нравится.Чем? :)Обхожусь родными средствами C# (if... throw...).
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771507
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
При чём тут вообще транзакции? В вашей оперативной системе пользователь долго и упорно набивает 100 записей и потом разом их сохраняет?На каждую запись, которая может содержать вложенные записи, обычно отдельная форма редактирования с сохранением в одной транзакции.

Транзакции при том, что сохраняется всё или ничего, поэтому сообщение "98 Accepted, а 2 Rejected" - это другой случай для нас достаточно редкий.Задам вопрос иначе: если пользователю за день надо обработать 100 чего-то и в двух случаях он допустит ошибку, то ничего из 100 чего-то не сохранится :)
Алексей КskyANAпропущено...
Чем? :)Обхожусь родными средствами C# (if... throw...).Хм. Звучит как: не нравится LINQ, обхожусь родными средствами C# (for... foreach...).
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771510
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Кcodearticles.ruВалидация - это такая же бизнес логика.Бизнес-логика на клиенте, ага. Клиентская валидация - это обычно необязательный бантик для удобства пользователя.
Да, а чем тебе не нравится? unobtrusive на клиенте это очень удобно.

skyANAИ что в нём готового? :)
Это сковорода. Хочешь - жарь, хочешь - не жарь
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771517
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAИ что в нём готового? :)
Это сковорода. Хочешь - жарь, хочешь - не жарь Ну например выше озвучивалась проверка логина пользователя при регистрации.
В базе уникальный индекс и Алексей пожарит, перехватив и обернув исключение.

А ты как пожаришь на IValidatableObject сковороде?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771547
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
На каждую запись, которая может содержать вложенные записи, обычно отдельная форма редактирования с сохранением в одной транзакции.

Транзакции при том, что сохраняется всё или ничего, поэтому сообщение "98 Accepted, а 2 Rejected" - это другой случай для нас достаточно редкий.Задам вопрос иначе: если пользователю за день надо обработать 100 чего-то и в двух случаях он допустит ошибку, то ничего из 100 чего-то не сохранится :)Я запутался. :-)
skyANAАлексей Кпропущено...
Обхожусь родными средствами C# (if... throw...).Хм. Звучит как: не нравится LINQ, обхожусь родными средствами C# (for... foreach...).Нет. Обходиться базовыми средствами C# не получается, поэтому мне нравится LINQ. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771555
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей Кпропущено...
Бизнес-логика на клиенте, ага. Клиентская валидация - это обычно необязательный бантик для удобства пользователя.
Да, а чем тебе не нравится? unobtrusive на клиенте это очень удобно.Уг. На клиенте только Knockout.Validation .
skyANAcodearticles.ruпропущено...

Это сковорода. Хочешь - жарь, хочешь - не жарь Ну например выше озвучивалась проверка логина пользователя при регистрации.
В базе уникальный индекс и Алексей пожарит, перехватив и обернув исключение.

А ты как пожаришь на IValidatableObject сковороде?++
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771601
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAВ базе уникальный индекс и Алексей пожарит, перехватив и обернув исключение.
Ну это феерический бред, даже без комментариев.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
[quot skyANA]А ты как пожаришь на IValidatableObject сковороде?[/quot]
public class Register : IValidatableObject
{
    [DataType(DataType.Text)]
    [Display(Name = "District Name")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a District Name")]
    [StringLength(40, MinimumLength = 1, ErrorMessage = "District Name must be between 1 and 40 characters")]
    public string DistrictName { get; set; }

    [DataType(DataType.Text)]
    [Display(Name = "Url Quick Find")]
    [Required(ErrorMessage = "You must provide a Quick Find Name")]
    [StringLength(15, MinimumLength = 3, ErrorMessage = "Url Quick Find must be between 3 and 15 characters")]
    public string QuickFind { get; set; }

    [DataType(DataType.Text)]
    [Display(Name = "User name")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "User name is requred")]
    [StringLength(10, MinimumLength = 1, ErrorMessage = "Url Quick Find must be between 1 and 10 characters")]
    public string Username { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Password is requred")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Re-Enter Password")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "You must re-enter your password to confirm you have entered it correctly")]
    public string PasswordConfirm { get; set; }

    [DataType(DataType.Text)]
    [Display(Name = "Display Name")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Display Name is requred")]
    [StringLength(20, MinimumLength = 1, ErrorMessage = "Display Name must be between 1 and 20 characters")]
    public string DisplayName { get; set; }

    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email Address")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Email Address is requred")]
    [StringLength(50, MinimumLength = 4, ErrorMessage = "Email Address must be between 4 and 50 characters")]
    public string EmailAddress { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        Regex lettersOnly = new Regex("^[a-zA-Z]*$");

        if (!lettersOnly.IsMatch(QuickFind))
            yield return new ValidationResult("Only letters A - Z are allowed in the Quick Find", new string[] { "QuickFind" });

        if (!lettersOnly.IsMatch(QuickFind))
            yield return new ValidationResult("Only letters A - Z are allowed for your User name", new string[] { "Username" });

        if (Password != PasswordConfirm)
            yield return new ValidationResult("Passwords do not match", new string[] { "Password", "PasswordConfirm" });

    }
}
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771604
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причем это работает как с сервера, так и с клиента - про ремоут валидацию Хвост уже говорил. Единый центральный класс для валидирования моделей. Что еще нужно-то? Какие исключения?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771609
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruПричем это работает как с сервера, так и с клиента - про ремоут валидацию Хвост уже говорил. Единый центральный класс для валидирования моделей. Что еще нужно-то? Какие исключения?Ну как ты без запроса к БД определишь уникальность введённого значения?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771620
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, ну то есть отдельный класс, по экземпляру которого будет создан профиль пользователя.

Проверку уникальности логина ты кстати не реализовал. Но не в этом суть.

Теперь представь, что 100500 профилей пользователей прилетают из сторонней системы и их тоже нужно проверить, но процедуру регистрации проводить не надо, пользователи уже прошли регистрацию в сторонней системе.
Надо просто проверить и положить в базу.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771625
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кcodearticles.ruПричем это работает как с сервера, так и с клиента - про ремоут валидацию Хвост уже говорил. Единый центральный класс для валидирования моделей. Что еще нужно-то? Какие исключения?Ну как ты без запроса к БД определишь уникальность введённого значения?Ну он засунет в модель регистрации ссылку на репозиторий.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771642
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КСобственно, это и обсуждается: как пробрасывать ошибку внутри слоёв сервиса и как передать ошибку от сервиса к клиенту.

Когда наконец ты поймёшь, что "ошибка" и "невалидные данные" -- это вещи кардинально разные, то всё станет на свои места. Для чего придумали исключения? Чтобы была возможность обработать нештатные ситуации. Для обработки данных, полученных от пользователя была придумана валидация. Если пользователь при регистрации ввёл некорректный логин -- это не является ошибкой, это штатная ситуация, которая предусмотрена логикой регистрации пользователя. Ошибка, это попытка вставить запись с некорректным логином, в нормальной ситуации до этого не должно доходить. Но и нельзя полностью полагаться на валидацию. Всегда надо дополнительно проверять данные в бизнес-логике.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771649
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну как ты без запроса к БД определишь уникальность введённого значения?Ну он засунет в модель регистрации ссылку на репозиторий.Ну будет обработка исключений на уровне валидатора, а не на уровне фильтра контроллера. Это ничего не меняет, внутри модели ошибку обычно удобнее пробрасывать исключением.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771659
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КСобственно, это и обсуждается: как пробрасывать ошибку внутри слоёв сервиса и как передать ошибку от сервиса к клиенту.

Когда наконец ты поймёшь, что "ошибка" и "невалидные данные" -- это вещи кардинально разные, то всё станет на свои места. Для чего придумали исключения? Чтобы была возможность обработать нештатные ситуации. Для обработки данных, полученных от пользователя была придумана валидация. Если пользователь при регистрации ввёл некорректный логин -- это не является ошибкой, это штатная ситуация, которая предусмотрена логикой регистрации пользователя. Ошибка, это попытка вставить запись с некорректным логином, в нормальной ситуации до этого не должно доходить. Но и нельзя полностью полагаться на валидацию. Всегда надо дополнительно проверять данные в бизнес-логике.
При проверке на уникальность перед insert будем делать select, или просто сделаем insert и обработаем ошибку, которую выдала БД?

Это можно обсуждать вечно. В моём случае использование исключений существенно упрощает программу - поэтому я их использую. Как только появится вред от исключений - я сразу же откажусь от них.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771664
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ моём случае использование исключений существенно упрощает программу - поэтому я их использую.Да ладно. А покажи как ты нарушение уникальности индекса обрабатываешь.
Алексей ККак только появится вред от исключений - я сразу же откажусь от них.Ну ну... Код сам везде перепишется и оттестируется :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771668
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПри проверке на уникальность перед insert будем делать select, или просто сделаем insert и обработаем ошибку, которую выдала БД?

Обязательно проверим. Закладывать ошибки, которые сыпятся из БД в работу бизнес-логики будет только совершенно на всю голову отмороженный дегенерат.

Алексей КЭто можно обсуждать вечно. В моём случае использование исключений существенно упрощает программу - поэтому я их использую. Как только появится вред от исключений - я сразу же откажусь от них.

Переубеждать тебя не собираюсь. Хочется только отметить, что это крайне убогое и отвратительное решение для тех новичков, кто читают топик. Чтобы не повторяли за тобой.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771672
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей КВ моём случае использование исключений существенно упрощает программу - поэтому я их использую.Да ладно. А покажи как ты нарушение уникальности индекса обрабатываешь. Это используется на уровне фильтра [api]контроллера.
Алексей ККак только появится вред от исключений - я сразу же откажусь от них.Ну ну... Код сам везде перепишется и оттестируется :)[/quot]И не такое бывало. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771676
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей ККак только появится вред от исключений - я сразу же откажусь от них.Ну ну... Код сам везде перепишется и оттестируется :)И не такое бывало. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771685
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КПри проверке на уникальность перед insert будем делать select, или просто сделаем insert и обработаем ошибку, которую выдала БД?

Обязательно проверим. Закладывать ошибки, которые сыпятся из БД в работу бизнес-логики будет только совершенно на всю голову отмороженный дегенерат.И причины будут озвучены?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771693
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Да ладно. А покажи как ты нарушение уникальности индекса обрабатываешь. Это используется на уровне фильтра [api]контроллера.Мдя. И как ты определяешь, что вот тут нарушение уникальности логина, а вот там e-mail-а?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771700
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Это используется на уровне фильтра [api]контроллера.Мдя. И как ты определяешь, что вот тут нарушение уникальности логина, а вот там e-mail-а?Уникальность определяется по коду ошибки в SqlException при попытке сделать insert/update. А e-mail тут причём? Разумеется, валидность e-mail определяется не на уровне БД.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771701
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Мдя. И как ты определяешь, что вот тут нарушение уникальности логина, а вот там e-mail-а?Уникальность определяется по коду ошибки в SqlException при попытке сделать insert/update. А e-mail тут причём? Разумеется, валидность e-mail определяется не на уровне БД.Сори, невнимательно прочитал, секундочку... :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771706
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ причины будут озвучены?

Причины просты и банальны: целостность данных в БД ≠ целостность бизнес-данных. Это должен понимать даже джуниор, а опытному разработчику смешивать эти понятия непростительно, вплоть до увольнения без выходного пособия. Пусть идёт в говноконторы, коих как я вижу предостаточно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771708
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Это используется на уровне фильтра [api]контроллера.Мдя. И как ты определяешь, что вот тут нарушение уникальности логина, а вот там e-mail-а?В этом случае используется это .
Код: c#
1.
2.
3.
4.
5.
6.
        static void AddDbCustomExceptionConverter()
        {
            var converter = new DbCustomExceptionConverter();
            converter.AddMessage("IX_sec_users_UserName", "Пользователь с указанным именем уже существует."); 
            LogExceptionParser.RegisterExceptionConverter(converter);
        }
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771711
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КИ причины будут озвучены?

Причины просты и банальны: целостность данных в БД ≠ целостность бизнес-данных.Из непонятого... Нужен список конкретных негативных эффектов.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771713
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ этом случае используется это .
Код: c#
1.
2.
3.
4.
5.
6.
        static void AddDbCustomExceptionConverter()
        {
            var converter = new DbCustomExceptionConverter();
            converter.AddMessage("IX_sec_users_UserName", "Пользователь с указанным именем уже существует."); 
            LogExceptionParser.RegisterExceptionConverter(converter);
        }



Ты уж извини, но это ПОЛНЫЙ п....ц. Если бы у нас во время ревью обнаружилось бы что-то подобное, разраб уже завтра бы уже был выброшен на рынок труда, нах.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771714
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КНу как ты без запроса к БД определишь уникальность введённого значения?
Запрос в БД пойдет из пост-контроллера (возможен аякс). Причем тут модель?

skyANAcodearticles.ru, ну то есть отдельный класс, по экземпляру которого будет создан профиль пользователя.
Проверку уникальности логина ты кстати не реализовал. Но не в этом суть.
Я тебе идею написал, а не реализацию конкретной задачи.

skyANAТеперь представь, что 100500 профилей пользователей прилетают из сторонней системы и их тоже нужно проверить, но процедуру регистрации проводить не надо, пользователи уже прошли регистрацию в сторонней системе.
Надо просто проверить и положить в базу.
Если в процессе участвуют n-систем, необходим единый шлюз. Например, REST сервис. В методе валидации модели (или через ремоут атрибут) у тебя будет на лету дергаться сервис, который будет делать проверку. В чем проблема?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771716
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КВ этом случае используется это .
Код: c#
1.
2.
3.
4.
5.
6.
        static void AddDbCustomExceptionConverter()
        {
            var converter = new DbCustomExceptionConverter();
            converter.AddMessage("IX_sec_users_UserName", "Пользователь с указанным именем уже существует."); 
            LogExceptionParser.RegisterExceptionConverter(converter);
        }



Ты уж извини, но это ПОЛНЫЙ п....ц. Если бы у нас во время ревью обнаружилось бы что-то подобное, разраб уже завтра бы уже был выброшен на рынок труда, нах.У меня это решение работает уже больше 10-и лет, ещё со времён C++ Builder. И пофиг мне на эстетические чувства каких-то там теоретиков.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771719
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей КНу как ты без запроса к БД определишь уникальность введённого значения?
Запрос в БД пойдет из пост-контроллера (возможен аякс). Причем тут модель?Да я про модель в другом понимании. Ладно, проехали.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771724
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К, почитай тут (Application Architecture Guide v2):

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

Проверка пользовательского ввода должна проводиться в слое представления, тогда как проверка на соответствие бизнес-правилам – в бизнес-слое. Однако если бизнес-слой и слой представления разнесены физически, логика проверки на соответствие бизнес-правилам должна дублироваться в слое представления для улучшения удобства использования и уменьшения времени отклика. Этого можно достичь с помощью метаданных или путем применения одинаковых компонентов правил проверки в обоих слоях.


Проектируйте стратегию проверки, руководствуясь целью ограничить, предотвратить и очистить злонамеренный ввод. Рассматривайте шаблоны и библиотеки сторонних производителей, которые могут помочь в реализации проверки. Определяйте бизнес-правила, обеспечивающие проверку, такие как границы транзакции, и реализуйте достаточно глубокую проверку, чтобы гарантировать выполнение этих правил.


Убедитесь, что правильно обрабатываете ошибки валидации и избегайте предоставления конфиденциальных данных в сообщениях об ошибках. Кроме того, обеспечьте протоколирование сбоев при проверке, что поможет при выявлении злонамеренных действий.


Какие нах исключения?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771725
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИз непонятого... Нужен список конкретных негативных эффектов.

Что за глупый вопрос? Возьмём того же многострадального пользователя. Очень часто вместо реального удаления записи используется поле с признаком удаления. Удалили пользователя с логином "mefazavr", значит логин должен освободиться. При наличии уникального индекса, логин останется "занятым".

Если бы у тебя был опыт, ты бы такие глупости бы не спрашивал. Никогда целостность БД не используется для валидации бизнес-данных. Никогда. Только в рядах совсем уж начинающих сопливых новичков. Но это обычно с опытом проходит.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771726
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей К, почитай тут (Application Architecture Guide v2):

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

Проверка пользовательского ввода должна проводиться в слое представления, тогда как проверка на соответствие бизнес-правилам – в бизнес-слое. Однако если бизнес-слой и слой представления разнесены физически, логика проверки на соответствие бизнес-правилам должна дублироваться в слое представления для улучшения удобства использования и уменьшения времени отклика. Этого можно достичь с помощью метаданных или путем применения одинаковых компонентов правил проверки в обоих слоях.


Проектируйте стратегию проверки, руководствуясь целью ограничить, предотвратить и очистить злонамеренный ввод. Рассматривайте шаблоны и библиотеки сторонних производителей, которые могут помочь в реализации проверки. Определяйте бизнес-правила, обеспечивающие проверку, такие как границы транзакции, и реализуйте достаточно глубокую проверку, чтобы гарантировать выполнение этих правил.


Убедитесь, что правильно обрабатываете ошибки валидации и избегайте предоставления конфиденциальных данных в сообщениях об ошибках. Кроме того, обеспечьте протоколирование сбоев при проверке, что поможет при выявлении злонамеренных действий.


Какие нах исключения? "И пофиг мне на эстетические чувства каких-то там теоретиков" (ц) Я

зы: не читал.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771731
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Мдя. И как ты определяешь, что вот тут нарушение уникальности логина, а вот там e-mail-а?В этом случае используется это .
Код: c#
1.
2.
3.
4.
5.
6.
        static void AddDbCustomExceptionConverter()
        {
            var converter = new DbCustomExceptionConverter();
            converter.AddMessage("IX_sec_users_UserName", "Пользователь с указанным именем уже существует."); 
            LogExceptionParser.RegisterExceptionConverter(converter);
        }

О как. А скрипт создания индекса как оформлен?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771733
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КУ меня это решение работает уже больше 10-и лет, ещё со времён C++ Builder. И пофиг мне на эстетические чувства каких-то там теоретиков.

Я уже сказал, я тебе переубеждать ни в чём не собираюсь. Поверь, я и не такой кошмар видел. Вообще это мудацкий менталитет. Все жалуются в России, что дороги УГ, но как только поциент попадает в контору, занимающейся укладкой дорог, то продолжает делать говно. Это вообще не лечится чтоли? Можешь делать как хочешь, лично мне пофиг. Но у нас ты бы точно не задержался.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771734
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Кcodearticles.ruпропущено...
Запрос в БД пойдет из пост-контроллера (возможен аякс). Причем тут модель?Да я про модель в другом понимании. Ладно, проехали.
У нас MVC :) Давай, чтобы не путаться, называть моделью (ну или хотя бы моделью представления) то, что биндится на вью. Тогда будет понимание.

ErrorPage.cshtml
Код: html
1.
2.
3.
4.
5.
6.
@model Models.ErrorModel
<h2>Ошибка</h2>


<pre style="color: Red">@Model.ErrorMessage</pre>
<p>@Html.ActionLink("На главную...", "Index", "Home")</p>



В данном случае в терминологии MVC модель - это класс ErrorModel. Можно еще её назвать вью моделью, тоже понятно всем будет. А ErrorPage.cshtml (не важно, отрендеренный или нет) - это представление.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771738
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КИз непонятого... Нужен список конкретных негативных эффектов.

Что за глупый вопрос? Возьмём того же многострадального пользователя. Очень часто вместо реального удаления записи используется поле с признаком удаления. Удалили пользователя с логином "mefazavr", значит логин должен освободиться. При наличии уникального индекса, логин останется "занятым".Если у меня при удалении пользователя он физически удаляется, если ссылочная целостность позволит, почему бы мне этим не воспользоваться. Впрочем, поле "заблокирован" в пользователях есть, и я не хочу, чтобы был добавлен пользователь, одноимённый заблокированному пользователю.
hVosttЕсли бы у тебя был опытОткуда? 14 лет стажа коту под хвост...
hVostt... ты бы такие глупости бы не спрашивал.Разве я что-то спрашивал? Мне нужно обоснование твоей точки зрения, не более того.
hVosttНикогда целостность БД не используется для валидации бизнес-данных. Никогда. Только в рядах совсем уж начинающих сопливых новичков. Но это обычно с опытом проходит.Ты живёшь в каком-то своём непонятном мире.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771741
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
В этом случае используется это .
Код: c#
1.
2.
3.
4.
5.
6.
        static void AddDbCustomExceptionConverter()
        {
            var converter = new DbCustomExceptionConverter();
            converter.AddMessage("IX_sec_users_UserName", "Пользователь с указанным именем уже существует."); 
            LogExceptionParser.RegisterExceptionConverter(converter);
        }

О как. А скрипт создания индекса как оформлен?Ну как обычно: create index IX_sec_users_UserName...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771746
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей КНу как ты без запроса к БД определишь уникальность введённого значения?
Запрос в БД пойдет из пост-контроллера (возможен аякс). Причем тут модель?

skyANAcodearticles.ru, ну то есть отдельный класс, по экземпляру которого будет создан профиль пользователя.
Проверку уникальности логина ты кстати не реализовал. Но не в этом суть.
Я тебе идею написал, а не реализацию конкретной задачи.

skyANAТеперь представь, что 100500 профилей пользователей прилетают из сторонней системы и их тоже нужно проверить, но процедуру регистрации проводить не надо, пользователи уже прошли регистрацию в сторонней системе.
Надо просто проверить и положить в базу.
Если в процессе участвуют n-систем, необходим единый шлюз. Например, REST сервис. В методе валидации модели (или через ремоут атрибут) у тебя будет на лету дергаться сервис, который будет делать проверку. В чем проблема?Код покажи.

А то сначала ты предлагаешь базу дёргать аяксом, а потом тут же предлагаешь в модели дёргать сервис :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771750
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОткуда? 14 лет стажа коту под хвост...

НЕ важно сколько времени ты провёл в столовой, важно сколько пирожков ты успел съесть. Видимо тебе твои 14 лет "стажа" не дали ничего. Уровень младшего джуниора.

Алексей КЕсли у меня при удалении пользователя он физически удаляется, если ссылочная целостность позволит, почему бы мне этим не воспользоваться. Впрочем, поле "заблокирован" в пользователях есть, и я не хочу, чтобы был добавлен пользователь, одноимённый заблокированному пользователю.

Ты как обычно путаешь. Понятия "заблокирован" и "удалён" -- совершенно разные. Если заблокирован, то да, логин этого пользователя должен быть занят. Но если пользователь удалён, то логин должен быть свободен. В крупных серьёзных системах записи обычно только помечаются удалёнными, но никогда не удаляются физически.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771752
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruАлексей Кпропущено...
Да я про модель в другом понимании. Ладно, проехали.
У нас MVC :) Давай, чтобы не путаться, называть моделью (ну или хотя бы моделью представления) то, что биндится на вью. Тогда будет понимание.

ErrorPage.cshtml
Код: html
1.
2.
3.
4.
5.
6.
@model Models.ErrorModel
<h2>Ошибка</h2>


<pre style="color: Red">@Model.ErrorMessage</pre>
<p>@Html.ActionLink("На главную...", "Index", "Home")</p>



В данном случае в терминологии MVC модель - это класс ErrorModel. Можно еще её назвать вью моделью, тоже понятно всем будет. А ErrorPage.cshtml (не важно, отрендеренный или нет) - это представление.Ок. :-)

Тогда я говорил, наверное, про репозитарий.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771753
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВалидацияПри проектировании стратегии валидации руководствуйтесь следующими рекомендациями:
Проверяйте все вводимые данные и параметры методов в бизнес-слое, даже если проверка ввода выполняется в слое представления.

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

Ограничивайте, отклоняйте и очищайте пользовательский ввод. Иначе говоря, предполагайте, что весь пользовательский ввод является злонамеренным. Проводите проверку длины, диапазона, формата и типа вводимых данных.



Еще раз. Какие нах исключения, братья?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771760
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
О как. А скрипт создания индекса как оформлен?Ну как обычно: create index IX_sec_users_UserName... То есть лежит где-то в виде sql-файла?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771763
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТы как обычно путаешь. Понятия "заблокирован" и "удалён" -- совершенно разные. Если заблокирован, то да, логин этого пользователя должен быть занят. Но если пользователь удалён, то логин должен быть свободен. В крупных серьёзных системах записи обычно только помечаются удалёнными, но никогда не удаляются физически.В "крупных серьёзных системах" ты и так ничего не сможешь удалить из-за ссылочной целостности.

А ещё в "крупных-серьёзных системах" оперативные данные хранятся на глубину юридического срока давности, потому что больше не требуется.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771765
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruДавай, чтобы не путаться, называть моделью (ну или хотя бы моделью представления) то, что биндится на вью.О как. А в случае, когда твой сервис принимает данные из сторонней системы, то что такое модель и как на дёргает сервис?

Ведь замкнутый круг получается. :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771767
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну как обычно: create index IX_sec_users_UserName... То есть лежит где-то в виде sql-файла?Зависит от того, на каком этапе создан индекс. При развёртывании мы отдаём файлы пустой БД, дальнейшие обновления скриптами. В общем, мы следим за именами индексов, если ты об этом. :-)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771768
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAКод покажи.
Не покажу.

skyANAА то сначала ты предлагаешь базу дёргать аяксом, а потом тут же предлагаешь в модели дёргать сервис :)
А что не понятно? Ввёл данные в UI, нажимаешь кнопку сохранить, пошел пост запрос формы, данные смапились в модель, модель упала в метод контроллера, контроллер опросил ModelState.IsValid, дернулся автоматом IValidatableObject.Validate, в реализации метода опросили ValidationContext, дернули единый шлюз - REST сервис проверки данных, сервис нам сказал false, мы разозлились и выплюнули yield return new ValidationResult("упс"), контроллер не прошел в итоге проверку на ModelState.IsValid и завернул нам дулю с маком. Какие сложности? Проблема, как пропихнуть в модель инстанс REST сервиса? Ну это в детском саде объяснят
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771771
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruВалидацияПри проектировании стратегии валидации руководствуйтесь следующими рекомендациями:
Проверяйте все вводимые данные и параметры методов в бизнес-слое, даже если проверка ввода выполняется в слое представления.

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

Ограничивайте, отклоняйте и очищайте пользовательский ввод. Иначе говоря, предполагайте, что весь пользовательский ввод является злонамеренным. Проводите проверку длины, диапазона, формата и типа вводимых данных.



Еще раз. Какие нах исключения, братья? Опять не читал.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771773
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAКод покажи.
Не покажу.Зануда.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771776
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruДавай, чтобы не путаться, называть моделью (ну или хотя бы моделью представления) то, что биндится на вью.О как. А в случае, когда твой сервис принимает данные из сторонней системы, то что такое модель и как на дёргает сервис?
Ведь замкнутый круг получается. :)
Мы сейчас говорим о MVC приложении. Никаких сервисов нету. Круг остается быть кругом. Если говорим "модель" в терминологии какого-то сервиса, это будет совсем другое. Не нужно мешать в навозную кучу мух, котлеты и жопу и пытаться едино называть всё это мясом. Мол, вот это мясо не работает. А какое мясо? Муха, котлета или задница. Так мы друг друга не поймемю
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771786
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAКод покажи.
Не покажу.

skyANAА то сначала ты предлагаешь базу дёргать аяксом, а потом тут же предлагаешь в модели дёргать сервис :)
А что не понятно? Ввёл данные в UI, нажимаешь кнопку сохранить, пошел пост запрос формы, данные смапились в модель, модель упала в метод контроллера, контроллер опросил ModelState.IsValid, дернулся автоматом IValidatableObject.Validate, в реализации метода опросили ValidationContext, дернули единый шлюз - REST сервис проверки данных, сервис нам сказал false, мы разозлились и выплюнули yield return new ValidationResult("упс"), контроллер не прошел в итоге проверку на ModelState.IsValid и завернул нам дулю с маком. Какие сложности? Проблема, как пропихнуть в модель инстанс REST сервиса? Ну это в детском саде объяснят 1. Когда тебя Алексей спросил, а где будет запрос в БД, ты придумал что он будет из пост-контроллера аяксом делаться.
Когда же вместо прямого доступа к БД понадобилось через REST сервис работать, то появился второй запрос ещё и в модели.
Нахуа? :)

2. Ну и выходит, что валидация-то на самом деле реализована на стороне сервиса, а не через IValidatableObject.Validate. И при валидации пачки данных прилетевших в REST сервис от сторонней системы, она по другому осуществляется.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771790
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
О как. А в случае, когда твой сервис принимает данные из сторонней системы, то что такое модель и как на дёргает сервис?
Ведь замкнутый круг получается. :)
Мы сейчас говорим о MVC приложении. Никаких сервисов нету. Круг остается быть кругом. Если говорим "модель" в терминологии какого-то сервиса, это будет совсем другое. Не нужно мешать в навозную кучу мух, котлеты и жопу и пытаться едино называть всё это мясом. Мол, вот это мясо не работает. А какое мясо? Муха, котлета или задница. Так мы друг друга не поймемюНе валяй дурака.
В моём примере ( 16680200 ) есть десктоп и есть сервис. А ты теперь хитро сменил контекст.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771798
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя ладно, добавим ещё и MVC приложение, это только подтверждает мои рассуждения о необходимости инжектить различную реализацию валидации в различные места.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771806
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA1. Когда тебя Алексей спросил, а где будет запрос в БД, ты придумал что он будет из пост-контроллера аяксом делаться.
Когда же вместо прямого доступа к БД понадобилось через REST сервис работать, то появился второй запрос ещё и в модели.
Нахуа? :)
2. Ну и выходит, что валидация-то на самом деле реализована на стороне сервиса, а не через IValidatableObject.Validate. И при валидации пачки данных прилетевших в REST сервис от сторонней системы, она по другому осуществляется.
1. Я говорил, что аякс возможет, читай внимательнее. Какая тебе разница, как я пошлю тебе запрос с данными в контроллер, постом формы или аяксом? Начинай уже думать что ли...
2. Валидация реализована только в IValidatableObject.Validate. Именно этот метод ответит на все вопросы. А что внутри его, не суть важно. Ты обрисовал пример, когда тебе нужна валидация и другим системам - на что я тебе предложил обобщить валидацию в едином сервисе. Это не обязательно должен быть сервис, это может быть всё что угодно, хранимая процедура, DLL, почтовый голубь. В чем непонимание?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771807
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...
Мы сейчас говорим о MVC приложении. Никаких сервисов нету. Круг остается быть кругом. Если говорим "модель" в терминологии какого-то сервиса, это будет совсем другое. Не нужно мешать в навозную кучу мух, котлеты и жопу и пытаться едино называть всё это мясом. Мол, вот это мясо не работает. А какое мясо? Муха, котлета или задница. Так мы друг друга не поймемюНе валяй дурака.
В моём примере ( 16680200 ) есть десктоп и есть сервис. А ты теперь хитро сменил контекст.
Начинай уже думать. Если говоришь слово "модель", уточняй контексты.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771813
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кcodearticles.ruИсключение - это серьезный сбой программы, а не просто какая-то нотификация из недр BL и прочих слоёв. Нотификации нужно получать через результаты методов.Чё опять?

Будем действовать как в Win API: getlasterror, hresult и всё такое? Сделать специальный InfoException для прикладных ошибок не лучше? Во все времена делалось именно так.
codearticles.ruИсключения нужно получать глобально, хотя бы уж через базовый контроллер...Лучше написать фильтр, и присобачить его на соответствующем уровне.

согласен с Алексей К. исключения не более чем многоуровневый ретурн. Делаем прикладной MyException и кидаем его. В соответствующих местах ловим. А серьезный сбой - это баг или полный фатал. Тут уже ничего не поможет
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771817
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
Не валяй дурака.
В моём примере ( 16680200 ) есть десктоп и есть сервис. А ты теперь хитро сменил контекст.
Начинай уже думать. Если говоришь слово "модель", уточняй контексты.Слабенькая отмаза.

Это как ты читал пример, что представил себе View Model вместо Domain Model и MVC приложение?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771821
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawАлексей Кпропущено...
Чё опять?

Будем действовать как в Win API: getlasterror, hresult и всё такое? Сделать специальный InfoException для прикладных ошибок не лучше? Во все времена делалось именно так.
пропущено...
Лучше написать фильтр, и присобачить его на соответствующем уровне.

согласен с Алексей К. исключения не более чем многоуровневый ретурн. Делаем прикладной MyException и кидаем его. В соответствующих местах ловим. А серьезный сбой - это баг или полный фатал. Тут уже ничего не поможетА конкретнее? В каких случаях делаем, а в каких нет?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771837
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANA1. Когда тебя Алексей спросил, а где будет запрос в БД, ты придумал что он будет из пост-контроллера аяксом делаться.
Когда же вместо прямого доступа к БД понадобилось через REST сервис работать, то появился второй запрос ещё и в модели.
Нахуа? :)
2. Ну и выходит, что валидация-то на самом деле реализована на стороне сервиса, а не через IValidatableObject.Validate. И при валидации пачки данных прилетевших в REST сервис от сторонней системы, она по другому осуществляется.
1. Я говорил, что аякс возможет, читай внимательнее. Какая тебе разница, как я пошлю тебе запрос с данными в контроллер, постом формы или аяксом? Начинай уже думать что ли...
2. Валидация реализована только в IValidatableObject.Validate. Именно этот метод ответит на все вопросы. А что внутри его, не суть важно. Ты обрисовал пример, когда тебе нужна валидация и другим системам - на что я тебе предложил обобщить валидацию в едином сервисе. Это не обязательно должен быть сервис, это может быть всё что угодно, хранимая процедура, DLL, почтовый голубь. В чем непонимание?Всё, мне просто смешно уже с тебя. Напиши реальный проект, а потом приходи с советами.

Аяксом он собрался опрашивать единый метод IValidatableObject.Validate.
У тебя пользователь вводит логин, остальные поля в этот момент ещё пустые, подумай над этим.

А пункт 2 в очередной раз подтверждает мои размышления.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771842
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAkmawпропущено...


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

как по мне, я делаю для всего пользовательского ввода в слое бизнес-логики
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771850
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawskyANAпропущено...
А конкретнее? В каких случаях делаем, а в каких нет?

как по мне, я делаю для всего пользовательского ввода в слое бизнес-логикиЗамечательно.

Возвращаемся к примеру:
а. вместо пользователя сторонний сервис, что "вводит" разом 100500 сущностей;
б. вторая сущность в наборе не валидная.

Что происходит с оставшимися 100498-ю?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771857
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAkmawпропущено...


как по мне, я делаю для всего пользовательского ввода в слое бизнес-логикиЗамечательно.

Возвращаемся к примеру:
а. вместо пользователя сторонний сервис, что "вводит" разом 100500 сущностей;
б. вторая сущность в наборе не валидная.

Что происходит с оставшимися 100498-ю?

это какая-то пакетная обработка. её логика будет зависеть от контекста задачи, но уж точно будет отличаться от ввода одной сущности через гуй
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771875
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAСлабенькая отмаза.
Нормальная отмаза

skyANAЭто как ты читал пример, что представил себе View Model вместо Domain Model и MVC приложение?
Какая Domain Model, акстись? Её в MVC вообще может не быть

MVC наиболее частные ошибки

MVCНо в объектно-ориентированном программировании используется активная модель MVC, где модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика. Следует отметить возможность модели инкапсулировать в себе другие модели. В свою очередь, контроллеры представляют собой лишь элементы системы, в чьи непосредственные обязанности входит приём данных из запроса и передача их другим элементам системы. Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами системы.

skyANAcodearticles.ruпропущено...

1. Я говорил, что аякс возможет, читай внимательнее. Какая тебе разница, как я пошлю тебе запрос с данными в контроллер, постом формы или аяксом? Начинай уже думать что ли...
2. Валидация реализована только в IValidatableObject.Validate. Именно этот метод ответит на все вопросы. А что внутри его, не суть важно. Ты обрисовал пример, когда тебе нужна валидация и другим системам - на что я тебе предложил обобщить валидацию в едином сервисе. Это не обязательно должен быть сервис, это может быть всё что угодно, хранимая процедура, DLL, почтовый голубь. В чем непонимание?Всё, мне просто смешно уже с тебя. Напиши реальный проект, а потом приходи с советами.

Аяксом он собрался опрашивать единый метод IValidatableObject.Validate.
У тебя пользователь вводит логин, остальные поля в этот момент ещё пустые, подумай над этим.

А пункт 2 в очередной раз подтверждает мои размышления.
Ну коли смешно, попей водички, отпустит. Проект написан и не один. А приходить ли с советами, я еще подумаю. И это мне решать, а не тебе, извини.

Далее. Включи уже свой мозг не тупи. Аяксом не опрашивается IValidatableObject.Validate, ты укурен? Аяксом оправляется пост запрос с данными. Контроллер маппит эти данные на модель и дальше всё идет по тому алгоритму, что я написал выше.

Если пользователь вводи пароль, а поля остальные пустые, сработает клиентская unobtrusive validation и не даст отправить запрос. Во-вторых, даже если js выключен, произойдет на сервере та же валидация и не пропустит модель дальше. И причем тут пароль, ты выше спрашивал про валидацию учетной записи и n-приложений, которые используют такую же логику. Теперь тебя понесло в пользователь вводит логин, остальные поля в этот момент ещё пустые. У меня закрадываются сомнения в том, что ты вообще кодер. Небось кирпичи носишь на стройке. Вот напиши хотя бы один проект, а потом примеры приводи.

Что не так с пунктом 2? Ты вообще понял, о чем я писал выше?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771880
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, поищи поиском , слово "домен" чуждо в этой статье
Если у тебя доменная модель в MVC, то тебе точно пора идти на стройку.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771903
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawskyANAпропущено...
Замечательно.

Возвращаемся к примеру:
а. вместо пользователя сторонний сервис, что "вводит" разом 100500 сущностей;
б. вторая сущность в наборе не валидная.

Что происходит с оставшимися 100498-ю?

это какая-то пакетная обработка. её логика будет зависеть от контекста задачи, но уж точно будет отличаться от ввода одной сущности через гуйВот!

А как же быть с тем, что "в слое бизнес-логики" уже зашита какая-то проверка? Костыль лепить?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771934
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAkmawпропущено...


это какая-то пакетная обработка. её логика будет зависеть от контекста задачи, но уж точно будет отличаться от ввода одной сущности через гуйВот!

А как же быть с тем, что "в слое бизнес-логики" уже зашита какая-то проверка? Костыль лепить?


пакетная обработка и сохранение одной сущности настолько разные задачи, что я бы не стал ломать голову как их строить из единых кирпичей. выражаясь по вашему, прикрутил бы костыль
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771936
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, ты выглядишь просто глупо.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771940
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawskyANAпропущено...
Вот!

А как же быть с тем, что "в слое бизнес-логики" уже зашита какая-то проверка? Костыль лепить?


пакетная обработка и сохранение одной сущности настолько разные задачи , что я бы не стал ломать голову как их строить из единых кирпичей. выражаясь по вашему, прикрутил бы костыльВ чём же разница между тем, что пользователь за день введёт 100 сущностей в систему и сервисом, что это сделает за один присест?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771953
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAkmawпропущено...



пакетная обработка и сохранение одной сущности настолько разные задачи , что я бы не стал ломать голову как их строить из единых кирпичей. выражаясь по вашему, прикрутил бы костыльВ чём же разница между тем, что пользователь за день введёт 100 сущностей в систему и сервисом, что это сделает за один присест?

в упрощенном варианте можно считать, что пакетная обработка - это итерация по одиночной. и наверное, так бывает. я с таким не сталкивался: пакетная была всегда связана с интеграцией и 100500 условий там было в дополнение к тому, что надо сохранить сущность. к тому же ексепшн не обязательно бросать сразу, можно накопить всех ошибок, сохранить их в ексепшн и кинуть в конце
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771971
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawskyANAпропущено...
В чём же разница между тем, что пользователь за день введёт 100 сущностей в систему и сервисом, что это сделает за один присест?

в упрощенном варианте можно считать, что пакетная обработка - это итерация по одиночной. и наверное, так бывает. я с таким не сталкивался: пакетная была всегда связана с интеграцией и 100500 условий там было в дополнение к тому, что надо сохранить сущность.Дак а я о чём?

О том, что тут одна валидация, тут другая. Чтобы не лепить костыли, она выносится из бизнес-логики в отдельный контур.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771978
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, ты выглядишь просто глупо.
И это говорит человек, которому нужно всё по 20 раз повторять, который не может понять сути о чем тут толкуют? Аплодирую стоя.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771985
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAcodearticles.ru, ты выглядишь просто глупо.
И это говорит человек, которому нужно всё по 20 раз повторять, который не может понять сути о чем тут толкуют? Аплодирую стоя.Опять выглядишь глупо. Я прекрасно тебя понимаю.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38771993
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, ты конечно можешь думать, что твоя шутка про поискать слово "домен" - это искромётный юмор.
Но на самом деле это выглядит идиотски.

Думаю ты прекрасно знаешь, что термин Domain Model переводится как Модель Предметной Области, и как это связано с бизнес-логикой приложения.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772047
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAОпять выглядишь глупо. Я прекрасно тебя понимаю.
А зачем тогда пишешь всякие глупости про вызов IValidatableObject.Validate из аякса? Десятый раз повторяю, даже в дефолтном mvc солюшене есть демо-модель регистрации с атрибутами валидации. Всё это отлично работает. Для более сложной валидации, типа проверки учетной записи на дубликат, есть дополнительные штатные средства типа IDataErrorInfo и IValidatableObject. Их и используем. В чем проблемы?

skyANAcodearticles.ru, ты конечно можешь думать, что твоя шутка про поискать слово "домен" - это искромётный юмор.
Но на самом деле это выглядит идиотски.
Думаю ты прекрасно знаешь, что термин Domain Model переводится как Модель Предметной Области, и как это связано с бизнес-логикой приложения.
Друже, да нету никакой предметной области, забудь про неё. Есть тупая модель, которая скармливается представлению через разоровский модификатор @model.

http://msdn.microsoft.com/en-us/library/ff649643.aspx Model. The model manages the behavior and data of the application domain, responds to requests for information about its state (usually from the view), and responds to instructions to change state (usually from the controller).


Черным по-белому написано, что модель управляет поведением и данными прикладной области, отвечает на запросы о предоставлении информации о ее состоянии, и отвечает на инструкции контроллера для изменения состояния. Модель в MVC может много чего. Это не просто "Модель Предметной Области". Хватит уже чушь нести!

Какая нахер предметная область если у меня такая MVC модель?

Код: c#
1.
2.
3.
4.
5.
public class MyModel
{
    [HiddenInput(DisplayValue = false)]
    public System.Web.HttpPostedFileBase File { get; set; }
}



Какую предметную область несет в себе этот файл, который маппится в модель? Атрибуты тоже чисто mvc-шные. Да много каких гвоздей можно забить сюда. Какая нахер предметная область?! Ты уже достал меня своей тупостью.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772060
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, где я писал глупости?

Зачем ты мне тут про MVC-то рассказываешь? Ты мой пример не понял?
Ты не понял что если к моему примеру добавить ещё и MVC морду, то там будет таже бизнес-логика, что и в десктопе, что и в сервисе?
Ты не понимаешь, что используется одна и таже бизнес-логика и в десктопе, и в сервисе, и в MVC приложении, но разная валидация?

Ты вообще понимаешь, что такое SOLID?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772073
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruДруже, да нету никакой предметной области, забудь про неё. Есть тупая модель, которая скармливается представлению через разоровский модификатор @model.

@model это же вью-модель, а не М из MVC. контроллер берёт данные из M и отдаёт их V (попутна конвертя их во ViewModel)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772085
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruДесятый раз повторяю, даже в дефолтном mvc солюшене есть демо-модель регистрации с атрибутами валидации. Всё это отлично работает. Для более сложной валидации, типа проверки учетной записи на дубликат, есть дополнительные штатные средства типа IDataErrorInfo и IValidatableObject. Их и используем. В чем проблемы?Покажи код того action, что обрабатывает посланный аяксом
codearticles.ruпост запрос формы, данные смапились в модель, модель упала в метод контроллера, контроллер опросил ModelState.IsValid, дернулся автоматом IValidatableObject.Validateи клиентский код, что парсит результат.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772101
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сигнатура action тоже интересует, а то вдруг там вместо Register хитрым образом окажется другой тип :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772137
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, где я писал глупости?
Выше ты писал глупости. Сразу после того, как я озвучил тебе банальный алгоритм. Тебя понесло куда-то в лес.

skyANAЗачем ты мне тут про MVC-то рассказываешь?
А про что мне тебе рассказывать? Про дельфи?

skyANAТы мой пример не понял?
Я тебе уже и решение расписал, и разжевал на пальцах. Разве что в рот еду не положил. А ты меня спрашиваешь, понял ли я твой пример. Ты комичен, друх.

skyANAТы не понял что если к моему примеру добавить ещё и MVC морду, то там будет таже бизнес-логика, что и в десктопе, что и в сервисе?
Ты не понимаешь, что используется одна и таже бизнес-логика и в десктопе, и в сервисе, и в MVC приложении, но разная валидация?
Ты вообще понимаешь, что такое SOLID?
Мля, какой же ты трудный...

hVostt@model это же вью-модель, а не М из MVC. контроллер берёт данные из M и отдаёт их V (попутна конвертя их во ViewModel)
Нету в MVC никаких вью моделей. Есть модель, вью и контроллер.

skyANAcodearticles.ruДесятый раз повторяю, даже в дефолтном mvc солюшене есть демо-модель регистрации с атрибутами валидации. Всё это отлично работает. Для более сложной валидации, типа проверки учетной записи на дубликат, есть дополнительные штатные средства типа IDataErrorInfo и IValidatableObject. Их и используем. В чем проблемы?Покажи код того action, что обрабатывает посланный аяксом

[HttpPost]
Код: c#
1.
2.
3.
4.
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid) {...
}



codearticles.ruпост запрос формы, данные смапились в модель, модель упала в метод контроллера, контроллер опросил ModelState.IsValid, дернулся автоматом IValidatableObject.Validateи клиентский код, что парсит результат.[/quot]
Мне лень тебе писать очевидные банальные вещи. А клиентского кода и нет, почему ты решил, что он должен быть? А если нужен клиентский код, то ты не в состоянии отправить через $.post запрос и принять ответ?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772153
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AccountController
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
            return RedirectToAction("Index", "Home");
        }
        AddErrors(result);
    }

    return View(model);
}




RegisterViewModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class RegisterViewModel : IValidatableObject
{
    [Required, EmailAddress, Display(Name = "Email")]
    public string Email { get; set; }

    [Required, DataType(DataType.Password), Display(Name = "Password")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [DataType(DataType.Password), Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (EmailExists(Email))
        {
            yield return new ValidationResult("Такой email уже существует");
        }
    }

    public bool EmailExists(string email)
    {
        return true;
    }
}



Всё. За 1 минуту написал тебе валидный код, без исключений и прочего шлака. Всё работает штатно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772161
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruМне лень тебе писать очевидные банальные вещи. А клиентского кода и нет, почему ты решил, что он должен быть? А если нужен клиентский код, то ты не в состоянии отправить через $.post запрос и принять ответ?Слив засчитан.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772167
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruНету в MVC никаких вью моделей. Есть модель, вью и контроллер.

В теории (говоря о паттерне MVC) нет. А в реализации есть, смысл открещиваться? Из модели берётся User, мапится в UserViewModel и отдаётся во вью. Что по-твоему есть UserViewModel -- модель? А User тогда что такое?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772169
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruМне лень тебе писать очевидные банальные вещи. А клиентского кода и нет, почему ты решил, что он должен быть? А если нужен клиентский код, то ты не в состоянии отправить через $.post запрос и принять ответ?Слив засчитан.
Слей себе мозги уже. Реально твоя тупость неискоренима.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772171
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruНету в MVC никаких вью моделей. Есть модель, вью и контроллер.
В теории (говоря о паттерне MVC) нет. А в реализации есть, смысл открещиваться? Из модели берётся User, мапится в UserViewModel и отдаётся во вью. Что по-твоему есть UserViewModel -- модель? А User тогда что такое?
Так речь именно о паттерне MVC. А по факту мы имеем вью модель в качестве модели MVC. Об этом я и писал выше.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772178
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
Слив засчитан.
Слей себе мозги уже. Реально твоя тупость неискоренима.В какой момент в твоём примере происходит аякс запрос к методу Register для проверки существования логина? Нет ведь там никакого аякса, признайся :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772182
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruТак речь именно о паттерне MVC. А по факту мы имеем вью модель в качестве модели MVC. Об этом я и писал выше.

Я понял, ты вью модель обозвал моделью в этом паттерне. Если UserViewModel, тогда User что такое?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772183
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ понял, ты вью модель обозвал моделью в этом паттерне. Если UserViewModel, тогда User что такое?

Поправка. Если UserViewModel -- это модель, тогда User что такое?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772185
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, и UserManager тоже интересно у нашего великолепного МСУ, что такое? :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772186
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...
Слей себе мозги уже. Реально твоя тупость неискоренима.В какой момент в твоём примере происходит аякс запрос к методу Register для проверки существования логина? Нет ведь там никакого аякса, признайся :)
Слушай, ты укурен что ли? Нету аякса! С какого перепуга он должен быть? Ты читаешь каким местом сообщения?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772188
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruТак речь именно о паттерне MVC. А по факту мы имеем вью модель в качестве модели MVC. Об этом я и писал выше.
Я понял, ты вью модель обозвал моделью в этом паттерне. Если UserViewModel, тогда User что такое?
UserViewModel - это модель в терминах MVC приложения. А что такое User, я не знаю. Ты не написал такого класса и есть ли такой класс, откуда мне знать. Возможно User, это прокси класс контекста EF.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772189
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAhVostt, и UserManager тоже интересно у нашего великолепного МСУ, что такое? :)
http://msdn.microsoft.com/en-us/library/dn613290(v=vs.108).aspx
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772190
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
В какой момент в твоём примере происходит аякс запрос к методу Register для проверки существования логина? Нет ведь там никакого аякса, признайся :)
Слушай, ты укурен что ли? Нету аякса! С какого перепуга он должен быть? Ты читаешь каким местом сообщения?Я читаю глазами, а ты точно задницей.
Я тебя просил привести код action, что обрабатывает тот запрос, про который ты трындел, что он послан аяксом.

А ты в итоге слился и ещё что-то про $.post при этом пукнул
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772195
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAhVostt, и UserManager тоже интересно у нашего великолепного МСУ, что такое? :)
http://msdn.microsoft.com/en-us/library/dn613290(v=vs.108).aspx А теперь процитируем тебя же: "модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика".

Так что же такое UserManager в терминах модель, не модель?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772197
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Слушай, ты укурен что ли? Нету аякса! С какого перепуга он должен быть? Ты читаешь каким местом сообщения?Я читаю глазами, а ты точно задницей.
Я тебя просил привести код action, что обрабатывает тот запрос, про который ты трындел, что он послан аяксом.

А ты в итоге слился и ещё что-то про $.post при этом пукнул

Ты в танке. Читай 20 раз про то, что я писал 16681912

МСУЗапрос в БД пойдет из пост-контроллера (возможен аякс)

Прочитай еще 30 раз. Теперь до тебя дошло или еще нужно прочитать 50 раз?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772199
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

http://msdn.microsoft.com/en-us/library/dn613290(v=vs.108).aspx А теперь процитируем тебя же: "модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика".

Так что же такое UserManager в терминах модель, не модель?
Нет, UserManager - это не модель. Это сервис авторизации.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772201
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruUserViewModel - это модель в терминах MVC приложения. А что такое User, я не знаю. Ты не написал такого класса и есть ли такой класс, откуда мне знать. Возможно User, это прокси класс контекста EF.

Ещё раз. Действие контроллера UserController.Edit(int userId) с помощью UserManager получает пользвателя по userId, экземпляр класса User. Затем он маппит его в экземпляр класса UserViewModel и отдаёт его View.

Ты говоришь, что UserViewModel -- это модель. Тогда User и UserManager -- что такое? Они не вписываются в паттерн MVC?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772202
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAА ты в итоге слился и ещё что-то про $.post при этом пукнул
Если ты через $.post не можешь вызать метод контроллера, то я вообще не понимаю, о чем с тобой можно дальше говорить
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772205
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
Я читаю глазами, а ты точно задницей.
Я тебя просил привести код action, что обрабатывает тот запрос, про который ты трындел, что он послан аяксом.

А ты в итоге слился и ещё что-то про $.post при этом пукнул

Ты в танке. Читай 20 раз про то, что я писал 16681912

МСУЗапрос в БД пойдет из пост-контроллера (возможен аякс)

Прочитай еще 30 раз. Теперь до тебя дошло или еще нужно прочитать 50 раз? Дурик, вот я тебя конкретно для случая, выделенного красным, попросил код привести.
Твой метод Register для этого не подходит.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772210
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruUserViewModel - это модель в терминах MVC приложения. А что такое User, я не знаю. Ты не написал такого класса и есть ли такой класс, откуда мне знать. Возможно User, это прокси класс контекста EF.

Ещё раз. Действие контроллера UserController.Edit(int userId) с помощью UserManager получает пользвателя по userId, экземпляр класса User. Затем он маппит его в экземпляр класса UserViewModel и отдаёт его View.

Ты говоришь, что UserViewModel -- это модель. Тогда User и UserManager -- что такое? Они не вписываются в паттерн MVC?
UserViewModel - это модель для представления MVC.
User - это тупая поко, dto или кодогенерированная прокся. Никакой логики.
UserManager - это сервис авторизации.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772217
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruhVosttпропущено...


Ещё раз. Действие контроллера UserController.Edit(int userId) с помощью UserManager получает пользвателя по userId, экземпляр класса User. Затем он маппит его в экземпляр класса UserViewModel и отдаёт его View.

Ты говоришь, что UserViewModel -- это модель. Тогда User и UserManager -- что такое? Они не вписываются в паттерн MVC?
UserViewModel - это модель для представления MVC.
User - это тупая поко, dto или кодогенерированная прокся. Никакой логики.
UserManager - это сервис авторизации.Ещё раз процетируем тебя же: "модель — это ... совокупность кода доступа к данным и СУБД, ... и вся бизнес-логика"
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772220
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAДурик, вот я тебя конкретно для случая, выделенного красным, попросил код привести.
Твой метод Register для этого не подходит.
Врёшь однако, как всегда. Ты написал вот эту глупость

skyANAКод покажи. А то сначала ты предлагаешь базу дёргать аяксом, а потом тут же предлагаешь в модели дёргать сервис :)

Потом я тебе расписал алгоритм. Потом ты начал тупить про то, что "появился второй запрос ещё и в модели" .

Так что не прикрывайся аяксом, ты изначально начал гнать какую-то ахинею.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772223
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAДурик, вот я тебя конкретно для случая, выделенного красным, попросил код привести.
Твой метод Register для этого не подходит.
Врёшь однако, как всегда. Ты написал вот эту глупость

skyANAКод покажи. А то сначала ты предлагаешь базу дёргать аяксом, а потом тут же предлагаешь в модели дёргать сервис :)

Потом я тебе расписал алгоритм. Потом ты начал тупить про то, что "появился второй запрос ещё и в модели" .

Так что не прикрывайся аяксом, ты изначально начал гнать какую-то ахинею.Я ничего не гнал, я просил код, как ты дёргаешь проверку существования логина аяксом. И тогда, и потом.
А ты так и не осилил.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772227
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruUserViewModel - это модель для представления MVC.
User - это тупая поко, dto или кодогенерированная прокся. Никакой логики.
UserManager - это сервис авторизации.

из вики

Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.

какие знания представляют сабой вью-модель? это просто класс-контейнер для передачи данных во вью. абсолютно с тем же успехом можно передать данные во ViewData или напрямую DTO. к тому же вью-модель, а именно UserViewModel, как раз таки СОДЕРЖИТ информацию о том, как эти данные визуализировать (UIHint).

я не понимаю, ты по серьёзному вью-модель считаешь моделью (буква М) из паттерна MVC?

удивляешь ты меня иногда...
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772231
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttcodearticles.ruUserViewModel - это модель для представления MVC.
User - это тупая поко, dto или кодогенерированная прокся. Никакой логики.
UserManager - это сервис авторизации.

из вики

Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.

какие знания представляют сабой вью-модель? это просто класс-контейнер для передачи данных во вью. абсолютно с тем же успехом можно передать данные во ViewData или напрямую DTO. к тому же вью-модель, а именно UserViewModel, как раз таки СОДЕРЖИТ информацию о том, как эти данные визуализировать (UIHint).

я не понимаю, ты по серьёзному вью-модель считаешь моделью (буква М) из паттерна MVC?

удивляешь ты меня иногда...Да жопой он виляет, ты же знаешь :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772343
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЯ ничего не гнал, я просил код, как ты дёргаешь проверку существования логина аяксом. И тогда, и потом.
А ты так и не осилил.

так а чё там делов-то?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        public JsonResult IsUID_Available(string Username) {

            if (!_repository.UserExists(Username))
                return Json(true, JsonRequestBehavior.AllowGet);

            string suggestedUID = String.Format(CultureInfo.InvariantCulture,
                "{0} is not available.", Username);

            for (int i = 1; i < 100; i++) {
                string altCandidate = Username + i.ToString();
                if (!_repository.UserExists(altCandidate)) {
                    suggestedUID = String.Format(CultureInfo.InvariantCulture,
                   "{0} is not available. Try {1}.", Username, altCandidate);
                    break;
                }
            }
            return Json(suggestedUID, JsonRequestBehavior.AllowGet);
        }



моделька

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class CreateUserModel : EditUserModel {
    [Required]
    [StringLength(6, MinimumLength = 3)]
    [Remote("IsUID_Available", "Validation")]
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
    [Editable(true)]
    public override string UserName { get; set; }
}



а вот Алексей и Ко. предлагают вот такой вариант:



бугагага
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772352
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа вот Алексей и Ко. предлагают вот такой вариант:
ну и что? деньги не пахнут (с)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772393
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилну и что? деньги не пахнут (с)

..но на их запах слетаются многие
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772410
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAАлексей К, а для тебя придумали System.Diagnostics.Contracts

Код: c#
1.
2.
3.
4.
5.
[ContractInvariantMethod]
protected void ObjectInvariant()
{
    Contract.Invariant(this.B != 0);
}

Не нравится.Вот, почитай для начала: Программирование по контракту в .NET Framework 4 .
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772436
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Не нравится.Вот, почитай для начала: Программирование по контракту в .NET Framework 4 .

для программирования по контракту совсем не обязательно тянуть какую-то инфраструктуру. очень просто все: проверяем допустимость состояния DTO - и кидаем пользовательский ексепшн "нарушения контракта". ну или проверяем какие-то пост состояния и т.п., если все сложней. это просто договоренность. наиболее просто она реализуется именно на основе ексепшнов. всякие атрибуты валидации от лукавого
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772437
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAЯ ничего не гнал, я просил код, как ты дёргаешь проверку существования логина аяксом. И тогда, и потом.
А ты так и не осилил.

так а чё там делов-то?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        public JsonResult IsUID_Available(string Username) {

            if (!_repository.UserExists(Username))
                return Json(true, JsonRequestBehavior.AllowGet);

            string suggestedUID = String.Format(CultureInfo.InvariantCulture,
                "{0} is not available.", Username);

            for (int i = 1; i < 100; i++) {
                string altCandidate = Username + i.ToString();
                if (!_repository.UserExists(altCandidate)) {
                    suggestedUID = String.Format(CultureInfo.InvariantCulture,
                   "{0} is not available. Try {1}.", Username, altCandidate);
                    break;
                }
            }
            return Json(suggestedUID, JsonRequestBehavior.AllowGet);
        }




моделька

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class CreateUserModel : EditUserModel {
    [Required]
    [StringLength(6, MinimumLength = 3)]
    [Remote("IsUID_Available", "Validation")]
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
    [Editable(true)]
    public override string UserName { get; set; }
}




а вот Алексей и Ко. предлагают вот такой вариант:



бугагага

атрибуты в данном случае нафиг не нужная муть. только размазывание кода.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772438
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawskyANAпропущено...
Вот, почитай для начала: Программирование по контракту в .NET Framework 4 .

для программирования по контракту совсем не обязательно тянуть какую-то инфраструктуруПрости, что тянуть?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772440
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAkmawпропущено...


для программирования по контракту совсем не обязательно тянуть какую-то инфраструктуруПрости, что тянуть?

микрософт предлагает какую-то библиотеку для более удобного юзания контрактов
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772443
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawskyANAпропущено...
Прости, что тянуть?

микрософт предлагает какую-то библиотеку для более удобного юзания контрактовбиблиотека Code Contracts уже расположена в ядре .NET Framework, так что не знаю, что Вы там собрались куда-то тянуть
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772445
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw,

Ви есть знатный тролль, сударь
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772574
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawисключения не более чем многоуровневый ретурн.++
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772581
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везёт вам, кроме прикладного кода, где исключение - это многоуровневый ретурн, ничего писать не надо.
Вот только не понятно, почему при этом мои задачи обзываются частным случаем :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772607
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВезёт вам..."Везёт сильнейшим" (ц)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772716
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Врёшь однако, как всегда. Ты написал вот эту глупость

пропущено...


Потом я тебе расписал алгоритм. Потом ты начал тупить про то, что "появился второй запрос ещё и в модели" .

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

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
<script>
    $(document).ready(function () {
        $("#save").click(function () {
            var model = { Email: $(".email").text() };
            $.post("@Url.Content("~/Account/Register/")", JSON.stringify(model));
        })
    });
</script>



Всё, метод контроллера тот же самый. Ты долго будешь включать дурачка?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
            return RedirectToAction("Index", "Home");
        }
        AddErrors(result);
    }

    return View(model);
}
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772720
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttкакие знания представляют сабой вью-модель? это просто класс-контейнер для передачи данных во вью. абсолютно с тем же успехом можно передать данные во ViewData или напрямую DTO. к тому же вью-модель, а именно UserViewModel, как раз таки СОДЕРЖИТ информацию о том, как эти данные визуализировать (UIHint).

я не понимаю, ты по серьёзному вью-модель считаешь моделью (буква М) из паттерна MVC?

удивляешь ты меня иногда...
Не суть, что и куда можно передать. В терминологии MVC нету никаких вью моделей. Нужно отталкиваться от этого. Вью модель есть в MVVM.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772849
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruНе суть, что и куда можно передать. В терминологии MVC нету никаких вью моделей. Нужно отталкиваться от этого. Вью модель есть в MVVM.

В случае ASP.NET MVC, то что передаётся в @model, это вью модель (не в том понимании, как в MVVM). Хотя и не обязательно применять этот термин, но он очень удобен для понимания, чего передаётся во вью.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772986
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
Я ничего не гнал, я просил код, как ты дёргаешь проверку существования логина аяксом. И тогда, и потом.
А ты так и не осилил.
Не пецди. Ты не просил "код, как я дёргаю проверку существования логина аяксом". Ты просто просил код. Код моего алгоритма. Я обвинил тебя в тупости и еще раз описал этот алгоритм на словах. Ты опять начал тупить. Тебе всё нужно кодом объяснять? Думалка не работает?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
<script>
    $(document).ready(function () {
        $("#save").click(function () {
            var model = { Email: $(".email").text() };
            $.post("@Url.Content("~/Account/Register/")", JSON.stringify(model));
        })
    });
</script>



Всё, метод контроллера тот же самый. Ты долго будешь включать дурачка?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
            return RedirectToAction("Index", "Home");
        }
        AddErrors(result);
    }

    return View(model);
}

Думалка у меня работает а у тебя нет. Ты понимаешь, что ты хрень написал?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38772995
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruНе суть, что и куда можно передать. В терминологии MVC нету никаких вью моделей. Нужно отталкиваться от этого. Вью модель есть в MVVM.
В случае ASP.NET MVC, то что передаётся в @model, это вью модель (не в том понимании, как в MVVM). Хотя и не обязательно применять этот термин, но он очень удобен для понимания, чего передаётся во вью.
Что, что передается в @model, это модель и ничто иное. http://www.asp.net/mvc/tutorials/mvc-5/introduction/accessing-your-models-data-from-a-controller
Я не спорю про разумность термина, но если говорить в контексте mvc, это модель.

skyANAДумалка у меня работает а у тебя нет. Ты понимаешь, что ты хрень написал?
Думалки у тебя никогда не было, всегда приходилось по 500 раз разжевывать. Ты хоть понимаешь, что это 100% рабочий код? А то, что модель на js туда упала - это артефакты вызова $.ajax. Всё-равно вся форма упадет в контроллер. Вопросы остались или будешь дальше тупить?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773003
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruДумалки у тебя никогда не было, всегда приходилось по 500 раз разжевывать. Ты хоть понимаешь, что это 100% рабочий код?Ахаха. Первое что ты получишь, это:

The required anti-forgery form field "__RequestVerificationToken" is not present.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773006
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, думал, что если в стандартном шаблоне пару строк дописать, то 100% заработает? И сел в лужу.

Вот это я и хотел увидеть
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773012
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЯ не спорю про разумность термина, но если говорить в контексте mvc, это модель.

Как же модель? Именно в терминах MVC, модель это как раз бизнес-логика, откуда приходят данные и куда они в итоге заталкиваются. Или что ты имеешь в виду?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773024
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, второе: .text() вернёт тебе пустоту, а не значение из инпута. Необходимо использовать .val().

Так что твой 100% рабочий код ни фига не перадаёт на сервер
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773032
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Третье: твой JSON.stringify(model) ни фига не замапится в модель, т.к. надо передавать Email=test@test.tu, а не { "Email": "test@test.tu" }.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773036
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruДумалки у тебя никогда не было, всегда приходилось по 500 раз разжевывать. Ты хоть понимаешь, что это 100% рабочий код?Ахаха. Первое что ты получишь, это:
The required anti-forgery form field "__RequestVerificationToken" is not present.
Садись, двойка. Не получаю я этого.

skyANAcodearticles.ru, думал, что если в стандартном шаблоне пару строк дописать, то 100% заработает? И сел в лужу.
Вот это я и хотел увидеть
Сел, написал и 100% работает. Лужа - для тебя. Обтекай, а не выдумывай сказки про RequestVerificationToken

skyANAcodearticles.ru, второе: .text() вернёт тебе пустоту, а не значение из инпута. Необходимо использовать .val().
Так что твой 100% рабочий код ни фига не перадаёт на сервер
Ты читаешь задним местом? Я же выше написал, модель в js - это огрызок от ajax, будет работать с ними и без него. Код 100% рабочий, дурик :) Включи голову уже.

hVosttcodearticles.ruЯ не спорю про разумность термина, но если говорить в контексте mvc, это модель.
Как же модель? Именно в терминах MVC, модель это как раз бизнес-логика, откуда приходят данные и куда они в итоге заталкиваются. Или что ты имеешь в виду?
В терминах MVC нету понятия вью модели.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773042
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, специально для тех, кто в танке.

Работают 100% оба варианта.

Код: javascript
1.
2.
var model = { Email: $(".email").text() };
$.post("@Url.Content("~/Account/Register/")", JSON.stringify(model));



Код: javascript
1.
$.post("@Url.Content("~/Account/Register/")");



Оба варианта постят форму в контроллер. Так что ты опять обосрался.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773048
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Четвёртое: до вызова IValidatableObject.Validate дело вообще не дойдёт, т.к. "Password is required".
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773053
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пятое: да даже бы если метод IValidatableObject.Validate отработал, в ответ ты получишь что? HTML страницы, что нужно парсить.

Вот это пять
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773055
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, дак давай, выложи проект, посмотрим, что у тебя 100% работает. Код или воображение
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773066
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAЧетвёртое: до вызова IValidatableObject.Validate дело вообще не дойдёт, т.к. "Password is required".
Это уже детали. Я тебе рассказал идею, разжевал её во всех плоскостях, ты выклянчил у меня код. А теперь начинаешь какие-то цепляться к какой-то ерунде. Тебе написать полностью рабочее решение? Ты реально дурак?

skyANAПятое: да даже бы если метод IValidatableObject.Validate отработал, в ответ ты получишь что? HTML страницы, что нужно парсить.
Вот это пять
Тупица. Парсить нужно $.ajax, а не $.post. Вот тут точно двойка. Иди учи матчать.

skyANAcodearticles.ru, дак давай, выложи проект, посмотрим, что у тебя 100% работает. Код или воображение
Выложу. А ты признаешь себя идиотом?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773068
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, дак давай, выложи проект, посмотрим, что у тебя 100% работает. Код или воображение

Если у тебя отсутствует голова и ты с 30-го раза невдупляешь, о чем тебе пишут, я могу еще набросить на вентилятор.

Вот так нужно "парсить", если у нас $.ajax.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$(document).ready(function () {
        $("#save").click(function () {
            var model = { Email: $("#em").val() };
            $.ajax({
                url: "@Url.Content("~/Account/RegisterAjax")",
                type: "POST",
                dataType: 'json',
                data: JSON.stringify(model),
                contentType: "application/json; charset=utf-8",
                cache: false,
                success: function (result) {
                    var validator = $("#registerForm").validate();
                    validator.showErrors(result.Errors);
                }
            });
        });
});



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[HttpPost, AllowAnonymous]
public ActionResult RegisterAjax(RegisterViewModel model)
{
    var errors = new Dictionary<string, string>();

    if (true)
    {
        errors.Add("duplicate", "Такой email уже занят");
    }

    return new JsonResult { Data = new { Errors = errors } };
}
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773072
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAЧетвёртое: до вызова IValidatableObject.Validate дело вообще не дойдёт, т.к. "Password is required".
Это уже детали. Я тебе рассказал идею, разжевал её во всех плоскостях, ты выклянчил у меня код. А теперь начинаешь какие-то цепляться к какой-то ерунде. Тебе написать полностью рабочее решение? Ты реально дурак?Ты уже написал 100% рабочее решение. Каждый может убедиться в его работоспособности, наример так:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<!DOCTYPE HTML>
<html>  
<head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
</head>  
<body>
  <input class="email" type="text" value="liar@msu.is" />
  <script>
    var msuIsLiar;

    msuIsLiar = $(".email").text();
    alert('Using .text(): ' + msuIsLiar);

    msuIsLiar = $(".email").val();
    alert('Using .val(): ' + msuIsLiar);
  </script>
</body>
</html>

Тынц

А дурак я потому, что столько времени потратил, чтобы вывести тебя на чистую воду. А смысл?
Ты как был упёртым equus asinus, им и остался.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773078
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAТы уже написал 100% рабочее решение. Каждый может убедиться в его работоспособности, наример так
Ты уже ляпнул чушь про anti-forgery form field "__RequestVerificationToken", думаю, хватит. Очередная тупость, которая не поддается здравой логике.

skyANAА дурак я потому, что столько времени потратил, чтобы вывести тебя на чистую воду. А смысл?
Ты как был упёртым equus asinus, им и остался.
Тут профит только один, в очередной раз показать всем, что мыслить ты не умеешь. Тебе объяснили, как можно делать валидацию 4 способами (классический POST, асинхронные запрос (post + ajax) и Remote). Ты продолжаешь жечь напалмом и стоить из себя идиота. И так в каждом топике.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773083
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAТы уже написал 100% рабочее решение. Каждый может убедиться в его работоспособности, наример так
Ты уже ляпнул чушь про anti-forgery form field "__RequestVerificationToken", думаю, хватит. Очередная тупость, которая не поддается здравой логике.После того как я тебе сказл про ошибку, ты по тихому избавился от атрибута ValidateAntiForgeryToken в своём 100% рабочем решении, и имеешь наглость обвинять меня в тупости?
Не красиво, ой как не красиво с твоей стороны.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773086
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruТут профит только один, в очередной раз показать всем, что мыслить ты не умеешь. Тебе объяснили, как можно делать валидацию 4 способами (классический POST, асинхронные запрос (post + ajax) и Remote). Ты продолжаешь жечь напалмом и стоить из себя идиота. И так в каждом топике.Ты так и не предоставил рабочего решения с твоим хвалённым Register: IValidatableObject черещ ajax. Это только на словах у тебя с ним и так можно, и сяк.
А на деле у тебя не вышло, не смотря на то, что ты несколько раз, что решение твоё 100% работает.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773088
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...
Ты уже ляпнул чушь про anti-forgery form field "__RequestVerificationToken", думаю, хватит. Очередная тупость, которая не поддается здравой логике.После того как я тебе сказл про ошибку, ты по тихому избавился от атрибута ValidateAntiForgeryToken в своём 100% рабочем решении, и имеешь наглость обвинять меня в тупости?
Не красиво, ой как не красиво с твоей стороны.
Где я от него избавился, ты в вакууме?
Вот атрибуты метода контроллера, всё работает, дурилко [HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773091
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
После того как я тебе сказл про ошибку, ты по тихому избавился от атрибута ValidateAntiForgeryToken в своём 100% рабочем решении, и имеешь наглость обвинять меня в тупости?
Не красиво, ой как не красиво с твоей стороны.
Где я от него избавился, ты в вакууме?Вот тут уже избавился: 16687039 .
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773092
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruТут профит только один, в очередной раз показать всем, что мыслить ты не умеешь. Тебе объяснили, как можно делать валидацию 4 способами (классический POST, асинхронные запрос (post + ajax) и Remote). Ты продолжаешь жечь напалмом и стоить из себя идиота. И так в каждом топике.Ты так и не предоставил рабочего решения с твоим хвалённым Register: IValidatableObject черещ ajax. Это только на словах у тебя с ним и так можно, и сяк.
А на деле у тебя не вышло, не смотря на то, что ты несколько раз, что решение твоё 100% работает.
Я уже все способы перечислил, как можно решить задачу. А бегать за тобой, подтирать код, разжевывать буквы, нет никакого желания. Могу написать, если конечно признаешься в своей тупости. По рукам?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773093
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruВот атрибуты метода контроллера, всё работает, дурилко [HttpPost, AllowAnonymous, ValidateAntiForgeryToken]Проект выкладывай. Пока только в твоём больном воображении что-то у тебя работает.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773094
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Где я от него избавился, ты в вакууме?Вот тут уже избавился: 16687039 .
Ну ты ламер

Это вообще другой уже код. Это решение на чистом $.ajax, а не на $.post

Ты читаешь жопой? Вот тут я написал, $.post работает со штатным методом (с ValidateAntiForgeryToken) 16686702
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773095
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruВот атрибуты метода контроллера, всё работает, дурилко [HttpPost, AllowAnonymous, ValidateAntiForgeryToken]Проект выкладывай. Пока только в твоём больном воображении что-то у тебя работает.
Я выложил код. Проект сам собери и осознай стою ничтожную тупость.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773096
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
Ты так и не предоставил рабочего решения с твоим хвалённым Register: IValidatableObject черещ ajax. Это только на словах у тебя с ним и так можно, и сяк.
А на деле у тебя не вышло, не смотря на то, что ты несколько раз, что решение твоё 100% работает.
Я уже все способы перечислил, как можно решить задачу. А бегать за тобой, подтирать код, разжевывать буквы, нет никакого желания. Могу написать, если конечно признаешься в своей тупости. По рукам?Слив засчитан.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773097
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Я уже все способы перечислил, как можно решить задачу. А бегать за тобой, подтирать код, разжевывать буквы, нет никакого желания. Могу написать, если конечно признаешься в своей тупости. По рукам?Слив засчитан.
Слив засчитан.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773102
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAпропущено...
Проект выкладывай. Пока только в твоём больном воображении что-то у тебя работает.
Я выложил код. Проект сам собери и осознай стою ничтожную тупость.Какое же ты трепло.

Твой код не работает. Тынц .
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773105
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Я выложил код. Проект сам собери и осознай стою ничтожную тупость.Какое же ты трепло.

Твой код не работает. Тынц .

Какая же ты тупица. Мой код 100% работает 16685710
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773121
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скианочка, а вот тебе хук с правой ($.ajax)

AccountController
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public ActionResult RegisterAjax(RegisterViewModel model)
{
    var errors = new Dictionary<string, string>();

    if (!ModelState.IsValid)
    {
        var messages = ModelState.Values.SelectMany(v => v.Errors);
    }
        
    return new JsonResult { Data = new { Errors = errors } };
}



Register.cshtml
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
@model WebApplication15.Models.RegisterViewModel
@{
    ViewBag.Title = "Register";
}

<h2>@ViewBag.Title.</h2>

@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Create a new account.</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Email, new { id = "email", @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.PasswordFor(m => m.Password, new { id = "p", @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.PasswordFor(m => m.ConfirmPassword, new { id = "p2", @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input id="save" type="submit" class="btn btn-default" value="Register" />
        </div>
    </div>
}

<script>
    $(document).ready(function () {
        $("#save").click(function () {
            var model = { Email: $("#email").val(), Password: $("#p").val(), ConfirmPassword: $("#p2").val() };
            $.ajax({
                url: "@Url.Content("~/Account/RegisterAjax")",
                type: "POST",
                dataType: 'json',
                data: JSON.stringify(model),
                contentType: "application/json; charset=utf-8",
                cache: false,
                success: function (result) {
                    //var validator = $("#registerForm").validate();
                    //validator.showErrors(result.Errors);
                }
            });
        });
    });
</script>



RegisterViewModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class RegisterViewModel : IValidatableObject
{
    [Required, EmailAddress, Display(Name = "Email")]
    public string Email { get; set; }

    [Required, DataType(DataType.Password), Display(Name = "Password")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [DataType(DataType.Password), Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (EmailExists(Email))
        {
            yield return new ValidationResult("Такой email уже существует");
        }
    }

    public bool EmailExists(string email)
    {
        return true;
    }
}



Только сцуко не говори, что тебя опять обманули. Это
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773131
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruМой код 100% НЕ работает 16685710
1. мы получим ошибку: The required anti-forgery form field "__RequestVerificationToken" is not present;
2. $(".email").text() вернёт пустую строку, а не значение инпута, т.к. для этого надо использовать метод .val();
3. JSON.stringify(model) не замапится в модель, т.к. надо передавать Email=test@test.tu, а не { "Email": "test@test.tu" };
4. Даже, если данные будут переданы на сервер, то до вызова IValidatableObject.Validate дело не дойдёт, т.к. согласно документации, данный метод вызывается после всех проверок, которые не будут пройдены, т.к. в модели нет ни пароля, ни подтверждения пароля, а они являются обязательными полями;
5. Но даже бы если метод IValidatableObject.Validate отработал, в ответ мы бы получили полностью отрендеренную страницу в виде HTML, и пришлось бы этот HTML парсить, чтобы выделить нужное нам сообщение.

Любой желающий может проверить перечисленные пункты, создав в Visual Studio проект по шаблону ASP.NET MVC Internet Application, и вставив туда код от МСУ.

C# код в метод Register(RegisterModel model) контроллера AccountController .
JavaScript код в Register.cshtml после @Scripts.Render("~/bundles/jqueryval") .
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773159
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruМой код 100% НЕ работает 16685710
1. мы получим ошибку: The required anti-forgery form field "__RequestVerificationToken" is not present;
2. $(".email").text() вернёт пустую строку, а не значение инпута, т.к. для этого надо использовать метод .val();
3. JSON.stringify(model) не замапится в модель, т.к. надо передавать Email=test@test.tu, а не { "Email": "test@test.tu" };
4. Даже, если данные будут переданы на сервер, то до вызова IValidatableObject.Validate дело не дойдёт, т.к. согласно документации, данный метод вызывается после всех проверок, которые не будут пройдены, т.к. в модели нет ни пароля, ни подтверждения пароля, а они являются обязательными полями;
5. Но даже бы если метод IValidatableObject.Validate отработал, в ответ мы бы получили полностью отрендеренную страницу в виде HTML, и пришлось бы этот HTML парсить, чтобы выделить нужное нам сообщение.

Любой желающий может проверить перечисленные пункты, создав в Visual Studio проект по шаблону ASP.NET MVC Internet Application, и вставив туда код от МСУ.

C# код в метод Register(RegisterModel model) контроллера AccountController .
JavaScript код в Register.cshtml после @Scripts.Render("~/bundles/jqueryval") .

1. Мы не получим ошибку The required anti-forgery form field "__RequestVerificationToken" is not present;
2. $(".email").text() не играет роли, я тебе уже 10 раз об этом писал. $.post постит форму, а не $(".email").text()
3. JSON.stringify(model) и не должна мапиться в модель, мапиться в модель будет вся форма. Тоже писал об этом. Это обычный огрызок кода, который нужно выкинуть. Но так или иначе он 100% работает
4. Ну так и пусть идет валидация всего класса. Пусть пользователь всё вводит, а потом мы отвалидируем. Если ты хочешь более гибкого решения, чтобы не зависеть от остальной валидации, то сделай вторую модель IValidatableObject и реализуй в ней проверку на email. И дергай её аяксом. Это всё уже дополнительная логика, которая не обсуждалась изначально. И тем не менее, эта логика отлично ложится в IValidatableObject
5. Я тебе еще раз повторяю, не нужно ничего парсить. Выше я пример дал, валидаторы штатно отработают. Если нужна гибкая динамика, выше я дал пример, как рендерить словарь ошибок в валидаторе формы через аякс. Опять же, штатные валидаторы рулят.

Купи уже мозг себе. Если ты там референсы скриптов не можешь осилить, это не мои проблемы.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My ASP.NET Application</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/bootstrap")
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                    <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                </ul>
                @Html.Partial("_LoginPartial")
            </div>
        </div>
    </div>
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
        </footer>
    </div>

    
</body>
</html>
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773189
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru1. Мы не получим ошибку The required anti-forgery form field "__RequestVerificationToken" is not present;
2. $(".email").text() не играет роли, я тебе уже 10 раз об этом писал. $.post постит форму, а не $(".email").text()
3. JSON.stringify(model) и не должна мапиться в модель, мапиться в модель будет вся форма. Тоже писал об этом. Это обычный огрызок кода, который нужно выкинуть. Но так или иначе он 100% работает
4. Ну так и пусть идет валидация всего класса. Пусть пользователь всё вводит, а потом мы отвалидируем. Если ты хочешь более гибкого решения, чтобы не зависеть от остальной валидации, то сделай вторую модель IValidatableObject и реализуй в ней проверку на email. И дергай её аяксом. Это всё уже дополнительная логика, которая не обсуждалась изначально. И тем не менее, эта логика отлично ложится в IValidatableObject
5. Я тебе еще раз повторяю, не нужно ничего парсить. Выше я пример дал, валидаторы штатно отработают. Если нужна гибкая динамика, выше я дал пример, как рендерить словарь ошибок в валидаторе формы через аякс. Опять же, штатные валидаторы рулят.

на счёт пунктов 2-4, скайана прав. придётся признать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773190
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЕсли ты хочешь более гибкого решения, чтобы не зависеть от остальной валидации, то сделай вторую модель IValidatableObject и реализуй в ней проверку на email. И дергай её аяксом. Это всё уже дополнительная логика, которая не обсуждалась изначально. И тем не менее, эта логика отлично ложится в IValidatableObjectНичего она туда отлично не ложиться.

Ты предлагаешь создать отдельный класс с отдельным полем, для проверки на валидность этого самого поля. Что-то типа:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class LoginModel: IValidatableObject
{
        public string Login { get; set; }

        public System.Collections.Generic.IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (userRepository.ExistsLogin(this.Login))
            {
                yield return new ValidationResult("Login already exists");
            }
        }
}


Причём, чтобы обработать результат, надо будет ещё и ModelState проверять и перебирать.
Причём необходимость валидировать RegisterModel при этом не отменяется.

Получаем больше кода, да ещё и дублирование. По сравнению с тем, что я предлагал.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773191
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и 5-ый тоже прав. и 1-ый тоже, так как пост.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773200
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru,

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<script>
    $(document).ready(function () {
        $("#save").click(function () {
            var model = { Email: $("#email").val(), Password: $("#p").val(), ConfirmPassword: $("#p2").val() };
            $.ajax({
                url: "@Url.Content("~/Account/RegisterAjax")",
                type: "POST",
                dataType: 'json',
                data: JSON.stringify(model), // ОШИБКА!!! это данные JSON, окгда требуется x-www-form-urlencoded
                contentType: "application/json; charset=utf-8", // ПЛЕВАТЬ, ВСЁ РАВНо надо x-www-form-urlencoded
                cache: false,
                success: function (result) {
                    //var validator = $("#registerForm").validate();
                    //validator.showErrors(result.Errors);
            // чёйто здесь?
                }
            });
        });
    });
</script>
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773205
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class RegisterViewModel : IValidatableObject
{
    [Required, EmailAddress, Display(Name = "Email")]
    public string Email { get; set; }

    [Required, DataType(DataType.Password), Display(Name = "Password")] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [DataType(DataType.Password), Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (EmailExists(Email))
        {
            yield return new ValidationResult("Такой email уже существует");
        }
    }

    public bool EmailExists(string email)
    {
        return true;
    }
}



ниправильно мешать атрибуты с IValidatableObject, ваще.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773209
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть же атрибут [Remote], чем он вам не угодил, не пойму???
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773222
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕсть же атрибут [Remote], чем он вам не угодил, не пойму???Я разве где-то говорил, что атрибут [Remote] мне не угодил?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773223
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruЕсли ты хочешь более гибкого решения, чтобы не зависеть от остальной валидации, то сделай вторую модель IValidatableObject и реализуй в ней проверку на email. И дергай её аяксом. Это всё уже дополнительная логика, которая не обсуждалась изначально. И тем не менее, эта логика отлично ложится в IValidatableObjectНичего она туда отлично не ложиться.

Ты предлагаешь создать отдельный класс с отдельным полем, для проверки на валидность этого самого поля. Что-то типа:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class LoginModel: IValidatableObject
{
        public string Login { get; set; }

        public System.Collections.Generic.IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (userRepository.ExistsLogin(this.Login))
            {
                yield return new ValidationResult("Login already exists");
            }
        }
}


Причём, чтобы обработать результат, надо будет ещё и ModelState проверять и перебирать.
Причём необходимость валидировать RegisterModel при этом не отменяется.

Получаем больше кода, да ещё и дублирование. По сравнению с тем, что я предлагал.
Отлично ложится. Чтобы не было дублирования и всё работало на одной IValidatableObject модели, тогда дожидаемся заполнения всех полей, постим и валидируем. Тоже вполне нормальный вариант. Всё зависит от способа исполнения.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773225
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ru1. Мы не получим ошибку The required anti-forgery form field "__RequestVerificationToken" is not present;
2. $(".email").text() не играет роли, я тебе уже 10 раз об этом писал. $.post постит форму, а не $(".email").text()
3. JSON.stringify(model) и не должна мапиться в модель, мапиться в модель будет вся форма. Тоже писал об этом. Это обычный огрызок кода, который нужно выкинуть. Но так или иначе он 100% работает
4. Ну так и пусть идет валидация всего класса. Пусть пользователь всё вводит, а потом мы отвалидируем. Если ты хочешь более гибкого решения, чтобы не зависеть от остальной валидации, то сделай вторую модель IValidatableObject и реализуй в ней проверку на email. И дергай её аяксом. Это всё уже дополнительная логика, которая не обсуждалась изначально. И тем не менее, эта логика отлично ложится в IValidatableObject
5. Я тебе еще раз повторяю, не нужно ничего парсить. Выше я пример дал, валидаторы штатно отработают. Если нужна гибкая динамика, выше я дал пример, как рендерить словарь ошибок в валидаторе формы через аякс. Опять же, штатные валидаторы рулят.

на счёт пунктов 2-4, скайана прав. придётся признать.
Что признать? Нечего там признаваться, я прокомментировал каждый пункт.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773227
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttниправильно мешать атрибуты с IValidatableObject, ваще.
Глупости. IValidatableObject отлично вписывается сюда.

hVosttЕсть же атрибут [Remote], чем он вам не угодил, не пойму???
Почему не угодил? Хороший вариант.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773260
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще в WildApricot валидация выглядит так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
[DataContract]
public class PageJsonModel
{
    public static readonly int NameMaxLength = 100;
    public static readonly int UrlMaxLength = 250;
    private const string UrlValidSimbolsMask = @"^[0-9a-zA-Z\-_\=\+\~\!\@\$\&\*\(\) ]*([\.\/][0-9a-zA-Z\-_\=\+\~\!\@\$\&\*\(\) ]*)*/?$";
    private const string UrlInvalidSubstringsMask = @"^(Sys|Admin|EmailTracker|Captcha|Content|WebDav|Common|Errors|Widget|Logs|Resources|RadControls|App_Themes|Payments|DES|event-.*|page-.*|Info/TermsOfUse|Info/UsageGuidelines|Info/PrivacyPolicy|Info/DialogOuterFrame)(/.*)?$|^(SupportTicketsHandler\.ashx|DESGetFiles\.aspx|ViewEvent\.aspx|DocumentHandler\.ashx|KeepSessionAlive\.ashx|CheckHttpsAuthentication\.aspx|Default\.aspx)$|(^.*?\.(config|asmx|axd|jpe?g|png|bmp|gif|swf|js|css))$";

    [DataMember(Name = "customUrl")]
    public string CustomUrl { get; set; }

    [DataMember(Name = "name")]
    public string Name { get; set; }

    [DataMember(Name = "seoSettings")]
    public SeoSettingsModel SeoSettings { get; set; }

    public static ValidationModel ValidationModel
    {
        get
        {
            var factory = new ValidationModelBuilder();

            return factory.CreateValidationModel<PageJsonModel>().Rules
                          .MaxLength.Of(o => o.Name).Is(NameMaxLength).FieldTitle(ValidationResources.PageName_FieldTitle)
                          .MaxLength.Of(o => o.CustomUrl).Is(UrlMaxLength).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).Is(UrlValidSimbolsMask).Description(UrlValidSimbolsMask).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).IsNegative(UrlInvalidSubstringsMask).ErrorMessage(ValidationResources.PageCustomUrl_ConflictsWithSystemUrls)
                          .CustomRule.Of(string.Empty).Is(typeof(CustomUrlUniqueValidationRule)).PinErrorMessageTo(o => o.CustomUrl).ErrorMessage(ValidationResources.PageCustomUrl_NotUnique)
                          .SubRules.Of(o => o.SeoSettings).Is(SeoSettingsModel.ValidationModel);
        }
    }
}


Код: c#
1.
2.
3.
4.
[HttpPost, ValidateToken, InitApplicationHttpContext, ScriptRequestHandleError]
public ActionResult Save(PageJsonModel data)
{
    PageJsonModel.ValidationModel.ThrowIfNotValid(data);


Причём ValidationModel конвертируется в ValidationJsonModel и работает на клиенте, а не только на сервере.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773263
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЧто признать? Нечего там признаваться, я прокомментировал каждый пункт.

То что ты привёл 16687324 -- это не работает, я показал где и почему, и это только по минимумому. самое очевидное так сказать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773265
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruГлупости. IValidatableObject отлично вписывается сюда.

нельзя!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773276
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruЧто признать? Нечего там признаваться, я прокомментировал каждый пункт.

То что ты привёл 16687324 -- это не работает, я показал где и почему, и это только по минимумому. самое очевидное так сказать.
То, что я привел, 100% работает. Вот солюшен .

hVosttcodearticles.ruГлупости. IValidatableObject отлично вписывается сюда.
нельзя!
Можно и нужно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773281
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, ты же знаешь, что МСУ будет вести себя как последнее трепло и тролль, но не признается, что облажался.
Давай не будем его кормить.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773303
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все мы знаем о насущной тупости скианы, которому нужно всё по 200 раз разжевывать. И даже на 201 раз у него в голове мало что отложится, чтобы понять, что он обычное днище. Давайте все скажем спасибо скиане за его очередную тупость.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773340
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, объясню, почему IValidatableObject таки лучше, чем Remote. Remote - это чисто mvc-шная залипушка, а IValidatableObject - это DataAnnotations из FW. IValidatableObject и IDataErrorInfo будут работать даже под водой. Это универсальное решение. Но я не против Remote, это тоже хороший способ быстро решить задачу.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773354
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, по тому, как сильно ты хамишь, можно понять степень твоей защитной реакции на то, как ты облажался.

Попробуй как-нибудь перебороть свои комплексы и признать ошибки. А то может и в патологию выродится.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773376
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruhVostt, объясню, почему IValidatableObject таки лучше, чем Remote. Remote - это чисто mvc-шная залипушка, а IValidatableObject - это DataAnnotations из FW. IValidatableObject и IDataErrorInfo будут работать даже под водой. Это универсальное решение. Но я не против Remote, это тоже хороший способ быстро решить задачу.

так а кто ж мешает сделать свой атрибут типа Remote? атрибуты явно лучше, чем реализация классом IValidatableObject, так как атрибуты могут применяться множество раз, на разных моделях. реализовывать IValidatableObject -- это крайний случай, которого всеми силами следует избегать, обычно он требуется когда валидация сложная и комплексная, учитывает значения всех или значительной части полей модели. такое требуется крайне редко. и это уж точно не подходит для проверки имени пользователя на валидность. ну просто можно свой атрибут реализовать, если Remote не устраивает. у меня таких разных кастомных атрибутов обычно набирается много, часть из них уже крепко сидит в шаред библиотеке, которая используется в нескольких проектах.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773387
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773392
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruhVostt, объясню, почему IValidatableObject таки лучше, чем Remote. Remote - это чисто mvc-шная залипушка, а IValidatableObject - это DataAnnotations из FW. IValidatableObject и IDataErrorInfo будут работать даже под водой. Это универсальное решение. Но я не против Remote, это тоже хороший способ быстро решить задачу.

так а кто ж мешает сделать свой атрибут типа Remote? атрибуты явно лучше, чем реализация классом IValidatableObject, так как атрибуты могут применяться множество раз, на разных моделях. реализовывать IValidatableObject -- это крайний случай, которого всеми силами следует избегать, обычно он требуется когда валидация сложная и комплексная, учитывает значения всех или значительной части полей модели. такое требуется крайне редко. и это уж точно не подходит для проверки имени пользователя на валидность. ну просто можно свой атрибут реализовать, если Remote не устраивает. у меня таких разных кастомных атрибутов обычно набирается много, часть из них уже крепко сидит в шаред библиотеке, которая используется в нескольких проектах.
Так в том-то и дело, что не нужны никакие дополнительные атрибуты. Всё отлично ложится в ValidatableObject и IDataErrorInfo, причем самым гибким образом. Да и зачем писать что-то типа Remote, если уже есть Remote. Попахивает идиотизмом. IValidatableObject и IDataErrorInfo это мощный инструмент, подходит на все 100% случаев жизни. Типа проверки на дубликат учетной записи. А кастомные атрибуты и прочая мишура идет в лес. Зачем писать велосипед, когда всё уже есть?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773397
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAhVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.
Я про это писал выше. Делается n конкретный IValidatableObject моделей и каждая может валидироваться по-отдельности, так и всё вместе. Причем в mvc есть готовый инструмент для форсирования валидации TryValidateModel.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773415
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAhVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.
Я про это писал выше. Делается n конкретный IValidatableObject моделей и каждая может валидироваться по-отдельности, так и всё вместе. Причем в mvc есть готовый инструмент для форсирования валидации TryValidateModel.Мимо.

У нас всего два класса, а не N: ViewModel и ValidationModel. Но при этом в разных местах можно применать разные наборы правил (ValidationRules), причём каких угодно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773430
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruТак в том-то и дело, что не нужны никакие дополнительные атрибуты. Всё отлично ложится в ValidatableObject и IDataErrorInfo, причем самым гибким образом. Да и зачем писать что-то типа Remote, если уже есть Remote. Попахивает идиотизмом. IValidatableObject и IDataErrorInfo это мощный инструмент, подходит на все 100% случаев жизни. Типа проверки на дубликат учетной записи. А кастомные атрибуты и прочая мишура идет в лес. Зачем писать велосипед, когда всё уже есть?

затем, что аспекты гибче наследования. атрибуты можно навесить в любых комбинациях на кучу моделей. а одна реализация IValidatableObject так и будет всего лишь одной реализацией для всего лишь одной модели. недостатки такого подхода объяснять?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773440
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
return factory.CreateValidationModel<PageJsonModel>().Rules
                          .MaxLength.Of(o => o.Name).Is(NameMaxLength).FieldTitle(ValidationResources.PageName_FieldTitle)
                          .MaxLength.Of(o => o.CustomUrl).Is(UrlMaxLength).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).Is(UrlValidSimbolsMask).Description(UrlValidSimbolsMask).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).IsNegative(UrlInvalidSubstringsMask).ErrorMessage(ValidationResources.PageCustomUrl_ConflictsWithSystemUrls)
                          .CustomRule.Of(string.Empty).Is(typeof(CustomUrlUniqueValidationRule)).PinErrorMessageTo(o => o.CustomUrl).ErrorMessage(ValidationResources.PageCustomUrl_NotUnique)
                          .SubRules.Of(o => o.SeoSettings).Is(SeoSettingsModel.ValidationModel);



выглядит как-то громоздко на мой взгляд и не использует существующую инфраструктуру валидации.

Не вижу особых преимуществ перед:

[MaxLength]
ValidSimbolsMask]
InvalidSubstringsMask]

интересно, почему вы сделали такой выбор
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773464
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Я про это писал выше. Делается n конкретный IValidatableObject моделей и каждая может валидироваться по-отдельности, так и всё вместе. Причем в mvc есть готовый инструмент для форсирования валидации TryValidateModel.Мимо.

У нас всего два класса, а не N: ViewModel и ValidationModel. Но при этом в разных местах можно применать разные наборы правил (ValidationRules), причём каких угодно.

Прямо. У нас может быть сколько угодно классов. Никто никаких ограничений не накладывает. UserValidationModel, UserEmailValidationModel, UserAccessValidationModel и т.п. И все эти валидационные модели централизованно пляшут от IValidatableObject.

hVosttcodearticles.ruТак в том-то и дело, что не нужны никакие дополнительные атрибуты. Всё отлично ложится в ValidatableObject и IDataErrorInfo, причем самым гибким образом. Да и зачем писать что-то типа Remote, если уже есть Remote. Попахивает идиотизмом. IValidatableObject и IDataErrorInfo это мощный инструмент, подходит на все 100% случаев жизни. Типа проверки на дубликат учетной записи. А кастомные атрибуты и прочая мишура идет в лес. Зачем писать велосипед, когда всё уже есть?

затем, что аспекты гибче наследования. атрибуты можно навесить в любых комбинациях на кучу моделей. а одна реализация IValidatableObject так и будет всего лишь одной реализацией для всего лишь одной модели. недостатки такого подхода объяснять?
Что может быть гибче прямого кодирования в реализации аннотаций? Причем, у нас не обязательно одна IValidatableObject, их может быть 10. И работать они могут по одной, две, три или сразу все вместе. В зависимости от потребностей. Декомпозируй как хочешь. Никаких левых атрибутов. Всё штатно и прозрачно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773469
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И самое главное, о чем все как-то забыли. Никакой логики исключений для валидации модели! За исключение - кастрация без суда и следствия. Дада.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773470
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruДекомпозируй как хочешь.

Как ты собираешься декомпозировать, если они прибиты к своим моделям?

Вот есть атрибут [Required], давай выбросим и напишем IValidatableObject для этих целей. Покажешь пример? А то что-то не догоняю, может ты и прав, на помойку эти атрибуты.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773472
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЗа исключение - кастрация без суда и следствия. Дада.


Вот здеся согласен полностью на все 100%. Ещё бы рук лешить для верности.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773525
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruДекомпозируй как хочешь.

Как ты собираешься декомпозировать, если они прибиты к своим моделям?

Вот есть атрибут [Required], давай выбросим и напишем IValidatableObject для этих целей. Покажешь пример? А то что-то не догоняю, может ты и прав, на помойку эти атрибуты.
Ну вот скиана захотел реализовать отдельно проверку на существование учетки. Ему не нравится, что нужно сначала заполнить все поля, а потом нажимать кнопку сохранить. И только тогда начинается валидация всей модели. Ему хочется, чтобы валидация на дубликатов учетки шло сразу и не зависимо от обязательности ввода пароля.

Поэтому имеем две модельки

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class RegisterViewModel
{
    [Required, EmailAddress, Display(Name = "Email")]
    public string Email { get; set; }

    [Required, DataType(DataType.Password), Display(Name = "Password")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [DataType(DataType.Password), Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

public class RegisterEmailViewModel : IValidatableObject
{
    public RegisterViewModel Model { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (EmailExists(Model.Email))
        {
            yield return new ValidationResult("Такой email уже существует");
        }
    }
}



Причем, вторую модель RegisterEmailViewModel мы можем валидировать как через ModelState (удобно для случаев аяксов), так и через TryValidateModel в контроллере при посте всей формы. Идею понял?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773544
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то это hVostt изначально хотел на лету подсказывать пользователю, что логин занят и предлагать свободные варианты.
А Алексей задал вопрос как этот запрос реализовать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773548
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, я же хотел код, после того как ты сказал, что это как два пальца об асфальт, хоть аяксом, хоть без.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773569
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAВообще-то это hVostt изначально хотел на лету подсказывать пользователю, что логин занят и предлагать свободные варианты.
А Алексей задал вопрос как этот запрос реализовать.
Так а где я был против варианта Remote? Это по сути тот же аякс, только автоматический.

skyANAcodearticles.ru, я же хотел код, после того как ты сказал, что это как два пальца об асфальт, хоть аяксом, хоть без.
Ну так а где ты увидел реальные трудности?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773579
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAВообще-то это hVostt изначально хотел на лету подсказывать пользователю, что логин занят и предлагать свободные варианты.
А Алексей задал вопрос как этот запрос реализовать.
Так а где я был против варианта Remote? Это по сути тот же аякс, только автоматический.

skyANAcodearticles.ru, я же хотел код, после того как ты сказал, что это как два пальца об асфальт, хоть аяксом, хоть без.
Ну так а где ты увидел реальные трудности?В простом MVC приложении я не вижу никаких трудностей в использовании IValidationObject. Трудности возникли у тебя, когда я код поросил.

Но! У меня-то другой пример был, с desktop И сторонней системой.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773587
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAВ простом MVC приложении я не вижу никаких трудностей в использовании IValidationObject. Трудности возникли у тебя, когда я код поросил.
С IValidationObject не может быть трудностей ни в простом MVC, ни в сложном. Вопросы и тупость начали бить из тебя фонтаном, когда я озвучил тебе алгоритм. Начиная с вызова IValidationObject.Validate прямо из аякса, кончая откровенным вбросом бредятины.

skyANAНо! У меня-то другой пример был, с desktop И сторонней системой.
Я тебе тоже уже отвечал на этот вопрос. Пишется отдельный сервис или пилится единая сборка. Там всё централизованно валидируется. Не вижу никаких принципиальных отличий.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773600
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttskyANA, выглядит как-то громоздко на мой взгляд и не использует существующую инфраструктуру валидации
Кстати, да. Отвратительный код, который перечеркивает напрочь всю прелесть штатной валидации. Зачем было делать такой лисапед, непонятно. Скорее всего от тупости и непонимание инфраструктуры валидации был сделан такой присест. За что заслуживают твердую двойку.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773640
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAВ простом MVC приложении я не вижу никаких трудностей в использовании IValidationObject. Трудности возникли у тебя, когда я код поросил.
С IValidationObject не может быть трудностей ни в простом MVC, ни в сложном. Вопросы и тупость начали бить из тебя фонтаном, когда я озвучил тебе алгоритм. Начиная с вызова IValidationObject.Validate прямо из аякса, кончая откровенным вбросом бредятины.Язык попридержи, утомил уже своим троллением.

Я до тебя докопался, чтобы ты наконец код написал рабочий. А не голословно заявлял: "IValidationObject подходит в 100% случаях".
Судя по тому как ты тут код публиковал, ты его и не использовал-то толком сам.

codearticles.ruskyANAНо! У меня-то другой пример был, с desktop И сторонней системой.
Я тебе тоже уже отвечал на этот вопрос. Пишется отдельный сервис или пилится единая сборка. Там всё централизованно валидируется. Не вижу никаких принципиальных отличий.А я что изначально предлагал-то?

Вынести валидацию в отдельный контур и использовать хоть в MVC, хоть в десктоп, хоть в сервисе, хоть в космосе
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773642
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruhVosttskyANA, выглядит как-то громоздко на мой взгляд и не использует существующую инфраструктуру валидации
Кстати, да. Отвратительный код, который перечеркивает напрочь всю прелесть штатной валидации. Зачем было делать такой лисапед, непонятно. Скорее всего от тупости и непонимание инфраструктуры валидации был сделан такой присест. За что заслуживают твердую двойку.Давай напиши мне код, чтобы твой IValidationObject магическим образом превратился в JSON и работал на клиенте.
Только 146% рабочий.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773646
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прелесть штатной валидации в том, что она не покрывает нужные нам кейсы.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773784
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня опять вопрос.

Насколько я понял, атрибут Remote используется для ajax-проверки "на лету".
Но он не обеспечивает полной проверки модели в случае, скажем, отключенного JavaScript или подделанного запроса.

Чем плох подход IValidationObject + Remote? И если он плох, то какие есть альтернативы?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773825
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzУ меня опять вопрос.

Насколько я понял, атрибут Remote используется для ajax-проверки "на лету".
Но он не обеспечивает полной проверки модели в случае, скажем, отключенного JavaScript или подделанного запроса.

Чем плох подход IValidationObject + Remote? И если он плох, то какие есть альтернативы?Тем, что люди перестают понимать, что это всего-лишь упрощение в реализации самых распространённых случаев.

Книга "Pragmatic Ajax: A Web 2.0 Primer" была опубликована в 2006-м году, за три года до .NET Framework 4.0 и IValidationObject, а он про альтернативы спрашивает :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773874
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAЯзык попридержи, утомил уже своим троллением.

Я до тебя докопался, чтобы ты наконец код написал рабочий. А не голословно заявлял: "IValidationObject подходит в 100% случаях".
Судя по тому как ты тут код публиковал, ты его и не использовал-то толком сам.
Глупенький. Моя голословность по поводу IValidationObject подкреплена фактами, которые ты до сих пор не осилил. Переписывать штатную валидацию - признак идиотизма, не иначе. Код мой всегда и всюду использовал именно такие подходы и никак иначе.

skyANAcodearticles.ruпропущено...
Я тебе тоже уже отвечал на этот вопрос. Пишется отдельный сервис или пилится единая сборка. Там всё централизованно валидируется. Не вижу никаких принципиальных отличий.А я что изначально предлагал-то?
Вынести валидацию в отдельный контур и использовать хоть в MVC, хоть в десктоп, хоть в сервисе, хоть в космосе
Ну так и в чем противоречие?

skyANAПрелесть штатной валидации в том, что она не покрывает нужные нам кейсы.
Например?

skyANAКнига "Pragmatic Ajax: A Web 2.0 Primer" была опубликована в 2006-м году, за три года до .NET Framework 4.0 и IValidationObject, а он про альтернативы спрашивает :)
Ты ж моя радость, IDataErrorInfo поддерживается в еще с первого фреймворка
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773875
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, ты что-то совсем уже не в тему начал писать.
"Факты" я твои прокомментировал уже давно. Штатную валидацию нигде не переписывал. О IDataErrorInfo тоже речи не было.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773876
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вижу в твоих словах проблески разума:
codearticles.ruМоя голословность по поводу IValidationObject подкреплена фактами
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773877
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruНу так и в чем противоречие?Ахаха. Я уже несколько раз писал, что твои упоротые рассуждения поддерживают моё предложение.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773879
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAПрелесть штатной валидации в том, что она не покрывает нужные нам кейсы.
Например?Тебе вышеозвученного мало что-ли?

1. Возможность в разных местах использовать разный набор правил валидации (Validation Rules), или не использовать их вовсе для одной и той же модели;
2. Возможность передавать правила в виде JSON клиенту и применять их там, так сказать, на лету.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774010
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как для 404-ой ошибки для файлов включить поддержку от 3-ёх уровней каталога и выше?

404-ая перехватывается -

http://site.ru/dsd/dsds.tsa
http://site.ru/dsd/sasa/dsds.tsa

от этого уровня и выше 404-ая ошибка в обработчик вообще не попадает -

http://site.ru/dsd/sasa/ttt/dsds.tsa

то есть если запрос файла в 3 папки и выше, то 404 отдаётся хрен пойми кем, просто белый лист и статус 404.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774018
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, нашёл как исправить багу.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774754
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, ты что-то совсем уже не в тему начал писать.
"Факты" я твои прокомментировал уже давно. Штатную валидацию нигде не переписывал. О IDataErrorInfo тоже речи не было.
Тебе задали вопрос, почему "не использована" штатная валидация. Ты начал сопли жевать. Об этом речь. О IDataErrorInfo речи не было, потому, что ты впервые об этом прочитал. Разумеется и речи не было.

skyANAcodearticles.ruНу так и в чем противоречие?Ахаха. Я уже несколько раз писал, что твои упоротые рассуждения поддерживают моё предложение.
Мне не совсем интересны твои убогие предположения. Ты слишком много предполагаешь и мало делаешь.

skyANAcodearticles.ruпропущено...

Например?Тебе вышеозвученного мало что-ли?

1. Возможность в разных местах использовать разный набор правил валидации (Validation Rules), или не использовать их вовсе для одной и той же модели;
2. Возможность передавать правила в виде JSON клиенту и применять их там, так сказать, на лету.
1. Делается элементарно с помощью нескольких классов IValidationObject / IDataErrorInfo / атрибуты, уже объяснял на пальцах.
2. Это реализовано в MVC специально для таких унылых ковнокодеров как ты. Читай про ValidationAttribute, IClientValidatable, DataAnnotationsModelValidator и js-адаптеры.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774759
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, прости, но то, что ты предлагаешь, не подходит.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774764
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мало-ли я делаю, или много. Фиг знает. В чём измерять? В деньгах? Ну 160 - 180 тыр. в месяц выходит.
Для Зеленограда это вполне себе много :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774793
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, прости, но то, что ты предлагаешь, не подходит.
Как это не подходит? Я сомневаюсь, что ты можешь что-то лучше предложить. И что за бред, зачем правила валидации складывать в json, потом писать механизм для разбора этого помёта? Unobtrusive custom attribute подходит на все случаи жизни 100% http://codearticles.ru/articles/784
Прекращай уже писать гавнокод и начни думать головой.

skyANAА мало-ли я делаю, или много. Фиг знает. В чём измерять? В деньгах? Ну 160 - 180 тыр. в месяц выходит.
Для Зеленограда это вполне себе много :)
Ну так можно и и 300 тыр поднимать, вопрос в загрузке. Если херачить без выходных по 12 часов в сутки, убивая и истощая свой организм.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774799
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruКак это не подходит?Вот так это не подходит.

codearticles.ruНу так можно и и 300 тыр поднимать, вопрос в загрузке. Если херачить без выходных по 12 часов в сутки, убивая и истощая свой организм.Ну да, если херачить так, то 300 и выйдет. Только правильно ты подметил, на фиг надо :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774839
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruКак это не подходит?Вот так это не подходит.
Твои "аргументы" порой ставят меня в ступор. Ну хорошо, "не подходит", значит не подходит. Убедил

skyANAНу да, если херачить так, то 300 и выйдет. Только правильно ты подметил, на фиг надо :)
Отож ))
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38774937
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, а смысл мне тебя убеждать, аргументы какие-то новые приводить?

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

Так что поверь мне на слово :)
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775042
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, а смысл мне тебя убеждать, аргументы какие-то новые приводить?
А смысл тогда тут писать? Сидел бы себе в коморке и код ваял, не отвлекаясь.

skyANAЯ тебе озвучил минимальные требования, по ним уже не подходит то, что ты предлагаешь.
А на проекте я не один работаю, конечно рассматривались и обсуждались разные варианты, в итоге остановились на текущей реализации.
Ты озвучил требования, а я тебе предложил штатные механизмы. Так вот и нужно с этого начинать, что кроме тебя на проекте еще есть гавнокодеры, которые начали изобретать велосипед. Я же тебя не обвиняю, я просто хочу ответов. Теперь я ответ получил, спасибо.

skyANAТак что поверь мне на слово :)
Вот уж кому, а тебе не поверю
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775052
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, иди ты в задницу со своим штатным механизмом. Вот честно, утомил уже.
Ты сам его ни в одном проекте не использовал и рабочий код тебе слабо написать. И толку от твоего тро-ло-ло ноль.

Ты вообще профессиональной разработкой ещё занимаешься, или уже на пенсии и ходишь сюда, чтобы какашками покидаться?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775062
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой бурное обсуждение данного вопроса. А за сим, раз тут собрались гуру Exceptions хотелось бы узнать про этот вариант реализации обработки ошибок. Таким образом, исключения собираются в таблице логов.

А обработка валидности данные делается так у DbContext:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public override int SaveChanges() {
    try {
        return base.SaveChanges();
    }
    catch (DbUpdateException dbEx) {
        Debug.WriteLine("Error: {0}", dbEx.Message);
        ChangeTracker.Entries().ToList().ForEach(entry => entry.State = EntityState.Unchanged);
        var message = dbEx.InnerException == null ? dbEx.Message : GetErrorMessage(dbEx);
        var log = new Log(message) { UserName = "DbContext", StackTrace = dbEx.StackTrace };
        Logs.Add(log);
        return SaveChanges();
    }
    catch (DbEntityValidationException dbEx) {
        ChangeTracker.Entries().ToList().ForEach(entry => entry.State = EntityState.Unchanged);
        var sb = new StringBuilder();
        foreach (
            var validationError in
                dbEx.EntityValidationErrors.SelectMany(validationErrors => validationErrors.ValidationErrors)) {
            sb.AppendFormat("Property: {0} Error: {1}", validationError.PropertyName,
                validationError.ErrorMessage);

        }
        var log = new Log(sb.ToString()) { UserName = "DbContext", StackTrace = dbEx.StackTrace };
        Logs.Add(log);
        return SaveChanges();
    }
}



То есть все ошибки в том числе и ошибки валидации "падают" в таблицу Logs.

Какие казусы и подземные камни скрыты в таком подходе? Ошибки какого типа невозможно отследить таким образом?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775068
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAМСУ, иди ты в задницу со своим штатным механизмом. Вот честно, утомил уже.
Качество твоих аргументов всё хлипче и хлипче. Мельчаешь, скиана...

skyANAТы сам его ни в одном проекте не использовал и рабочий код тебе слабо написать. И толку от твоего тро-ло-ло ноль.
Откуда тебе известно, что я его ни в одном проекте не использовал? Почему мне рабочий код написать слабо? Я тебе даже рецепт выкатил, который уже как 2 года пылится на сайте. А ты всё продолжаешь дурачка включать. Доколе?

skyANAТы вообще профессиональной разработкой ещё занимаешься, или уже на пенсии и ходишь сюда, чтобы какашками покидаться?
Какая разработка, акстись. Я профессиональный хирург, лечу таких вот как ты неофитов. Ну и заодно какашками кидаюсь, пока пациент под наркозом.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775074
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruКакая разработка, акстись.Понятно, вопросов больше не имею.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775082
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabonga,

1. Что делает return SaveChanges(); в блоках catch?
2. Зачем на каждое из исключений создавать отдельный лог?
3. Ну и такой handling исключения я бы инкапсулировал в отдельный класс. Назовём его ExceptionHandler.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775086
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А понял...

Код: c#
1.
return SaveChanges();

ни фига не делает, т.к. перед этим вызывается
Код: c#
1.
ChangeTracker.Entries().ToList().ForEach(entry => entry.State = EntityState.Unchanged);


Жесть какая-то.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38775100
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это тоже напрягает:
Код: c#
1.
var log = new Log(sb.ToString()) { UserName = "DbContext", StackTrace = dbEx.StackTrace };


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

Чем Exception.Source не устроил?
...
Рейтинг: 0 / 0
406 сообщений из 406, показаны все 17 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC: обработка исключения в контроллере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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