powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / собственный обработчик ошибок - проблема с передачей statusDescription
6 сообщений из 6, страница 1 из 1
собственный обработчик ошибок - проблема с передачей statusDescription
    #39321162
ssa82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MVC
сделал свой обработчик для 403
в webconfig добавил
<system.webServer>
....
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404"></remove>
<remove statusCode="403"></remove>
<error statusCode="403" path="/Error/Forbidden" responseMode="ExecuteURL"/>
<error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL"/>
</httpErrors>
</system.webServer>

сделал контроллер, представление
public ActionResult Forbidden(Exception ex)
{
Response.StatusCode = 403;
return View(ex);
}

вызов делаю по
throw new HttpException(403, "Вы не имеете возможность редактировать эту запись");

сам вызов, переход работает, но не могу никак добиться чтобы он в контроллер отдавал моё описание к ошибке.
Вот и вопрос как?
...
Рейтинг: 0 / 0
собственный обработчик ошибок - проблема с передачей statusDescription
    #39328421
ssa82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если кому то ещё интересно, я так это решил:
добавил в Global.asax
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null)
{
Session["error"] = exception.Message;
}
}
в итоге тут ошибка есть, запомнил текст в сессии, а дальше его можно использовать в контролах и представлении

@model Exception
@{
ViewBag.Title = "Ошибка 403";
}

<h2>Нет прав доступа</h2>
@Session["error"]
...
Рейтинг: 0 / 0
собственный обработчик ошибок - проблема с передачей statusDescription
    #39328695
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssa82,

StatusDescripton не предназначен для вывода во View, поэтому вы делаете это неправильно. Если хотите что-то вывести во вью, используйте стандартные средства. Например, используйте свой фильтр для перехвата исключений и генерации требуемого вывода: вызов нужного вью с нужной вью-моделью, или на крайний случай с передачей текста ошибки через ViewBag.

По поводу решения через сессию, оно хоть и выглядит как рабочее, но совершенно неправильно использовать сессию для передачи данных во вью. Не делайте так в рабочих проектах.
...
Рейтинг: 0 / 0
собственный обработчик ошибок - проблема с передачей statusDescription
    #39332447
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssa82,


Я бы сделал всё немного по-другому .
...
Рейтинг: 0 / 0
собственный обработчик ошибок - проблема с передачей statusDescription
    #39332460
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabongassa82,


Я бы сделал всё немного по-другому .

Ох и понавидался же я всяких удивительных схем соревнующихся друг с другом по дикости и степени кривизны костылей для обработки ошибок в ASP.NET/MVC, даже целые решения в нугете для 404 валяются. А всего-то надо сделать следующее:

1. Кастомный глобальный фильтр исключений для логгирования ошибок.
2. Кастомные страницы ошибок (например, как описаны в статье, но желательно, чтобы 500 была статической, или пусть генерируется раз и сидит в кеше).
3. Трансформация конфига:

Web.Release.config

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  <system.webServer>

    <httpErrors xdt:Transform="Insert" errorMode="DetailedLocalOnly" existingResponse="Replace" defaultResponseMode="ExecuteURL">
      <remove statusCode="403" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <error statusCode="403" path="/Error/Forbidden" responseMode="ExecuteURL" />
      <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL" />
      <error statusCode="500" path="/Error/InternalServerError" responseMode="ExecuteURL" />
    </httpErrors>

  </system.webServer>



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

Резюмирую, ИМХО статья о том как делать не надо.
...
Рейтинг: 0 / 0
собственный обработчик ошибок - проблема с передачей statusDescription
    #39332475
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttА всего-то надо сделать следующее:Если я всё правильно вспоминаю, то в прошлый раз выяснилось, что в таким образом нельзя указать адрес относительно корня приложения, только относительно корня сайта.

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


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