Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как правильно реализовать 404 ошибку / 25 сообщений из 70, страница 1 из 3
28.08.2014, 15:45
    #38731799
D_A_S1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Добрый день!
Имеется сайт на ASP.NET.
Необходимо правильно реализовать 404 ошибку, т.е. чтобы статус был именно 404 в таких случаях:
1) www.site.ru/asd
2) www.site.ru/default.aspx/asdasd
ТО что есть в интернете, не помогает.
...
Рейтинг: 0 / 0
28.08.2014, 16:01
    #38731844
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Global.asax.cs
Код: 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.
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Error(object sender, EventArgs e)
        {
            var context = ((MvcApplication)sender).Context;

            context.ClearError();
            context.Response.Clear();
            context.Response.TrySkipIisCustomErrors = true;
            context.Response.StatusCode = 404; // NotFound

            // Метод контроллера Error/Index содержит страницу с ошибкой.
            var rd = new RouteData();
            rd.Values["controller"] = "Error";
            rd.Values["action"] = "Index";

            IController c = new ErrorController();

            try
            {
                c.Execute(new RequestContext(new HttpContextWrapper(context), rd));
            }
            catch
            {
                // Навсякий...
                context.Response.Write("Error page error.");
            }
        }
    }


web.config
Код: xml
1.
2.
<system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true" />
...
Рейтинг: 0 / 0
28.08.2014, 16:48
    #38731917
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
D_A_S1,

вот всё что нужно. никакой магии, никаких ковыряний в Global.asax

Web.config

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  <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>



контроллер

Код: 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.
    [SessionState(SessionStateBehavior.Disabled)]
    [OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
    public class ErrorController : Controller
    {
        private static readonly Logger Log = LogManager.GetLogger("HttpError");

        private HttpStatusCode _httpStatusCode;
        private string _statusCodeDescription;

        // 500
        public ActionResult InternalServerError()
        {
            SetResponse(HttpStatusCode.InternalServerError);
            // message to view from TempData
            return View();
        }

        // 404
        public ActionResult NotFound()
        {
            SetResponse(HttpStatusCode.NotFound);
            return View();
        }

        // 403
        public ActionResult Forbidden()
        {
            SetResponse(HttpStatusCode.Forbidden);
            return View();
        }

        private void SetResponse(HttpStatusCode httpStatusCode)
        {
            _httpStatusCode = httpStatusCode;
            _statusCodeDescription = HttpWorkerRequest.GetStatusDescription((int)_httpStatusCode);
            Response.StatusCode = (int)_httpStatusCode;
            Response.StatusDescription = _statusCodeDescription;
        }

        protected override void OnActionExecuted(ActionExecutedContext context)
        {
            if (!Log.IsDebugEnabled)
                return;

            Log.Debug(String.Format("{0}, {1}, IP {2}, \"{3}\", REF {4}",
                (int)_httpStatusCode,
                HandleErrorFilter.GetRequestInfo(Request),
                Request.UserHostAddress,
                Request.UserAgent,
                Request.UrlReferrer == null ? "---" : Request.UrlReferrer.AbsoluteUri));
        }

    }



ну и пару тройку вьюшек для контроллеров. проследи, чтобы там никаких исключений не падало ни при каких обстоятельствах.
...
Рейтинг: 0 / 0
28.08.2014, 17:19
    #38731966
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
...
Рейтинг: 0 / 0
28.08.2014, 17:41
    #38732002
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
МСУ http://codearticles.ru/articles/2337

плохой рецепт, во-первых эта либа безбожно устарела (для MVC 3), а во-вторых, делает полную хрень через задницу.

решается же элементарно штатными средствами, с помощью Web.config и одного контроллера.
...
Рейтинг: 0 / 0
28.08.2014, 17:45
    #38732007
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
hVosttМСУ http://codearticles.ru/articles/2337
плохой рецепт, во-первых эта либа безбожно устарела (для MVC 3), а во-вторых, делает полную хрень через задницу.
решается же элементарно штатными средствами, с помощью Web.config и одного контроллера.
Так а со времен MVC3 ничего не изменилось, зачем ей обновляться. Решается штатно - согласен. Либа для лентяев - поставит и работает.
...
Рейтинг: 0 / 0
28.08.2014, 17:53
    #38732019
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
МСУТак а со времен MVC3 ничего не изменилось, зачем ей обновляться. Решается штатно - согласен. Либа для лентяев - поставит и работает.

Видел что эта либа делает? Это какой-то форменный ужас! Модуль, обработчик, своя фабрика контроллеров, и всё это регистрируется динамически через веб активатор. Ради того, чтобы показать свою страницу 404. Атас... А всего-то надо прописать несколько строк в Web.config

На хабре уже как-то представляли эту либу. Некоторые после этого усомнились в адекватности разработчиков ASP.NET.
...
Рейтинг: 0 / 0
28.08.2014, 17:58
    #38732023
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
hVosttВидел что эта либа делает?
Видел. У меня она стоит и уже как 2 года работает.

hVosttЭто какой-то форменный ужас! Модуль, обработчик, своя фабрика контроллеров, и всё это регистрируется динамически через веб активатор.
Ну чел решил блеснуть извилинами, без паники

hVosttРади того, чтобы показать свою страницу 404. Атас... А всего-то надо прописать несколько строк в Web.config
Так никто ж не спорит, лучше самому честно запилить реализацию. Кстати, твой код закинул в рецепт, он прям просится туда.
...
Рейтинг: 0 / 0
28.08.2014, 18:11
    #38732042
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
МСУВидел. У меня она стоит и уже как 2 года работает.

лентяй


МСУТак никто ж не спорит, лучше самому честно запилить реализацию. Кстати, твой код закинул в рецепт, он прям просится туда.

хитро, в тот же рецепт, теперь наезд на рецепт выглядит глупо
...
Рейтинг: 0 / 0
28.08.2014, 18:30
    #38732065
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
hVosttтеперь наезд на рецепт выглядит глупо
...
Рейтинг: 0 / 0
29.08.2014, 09:55
    #38732380
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Отсюда

ExecuteURLServes dynamic content, for example, a .asp file for the custom error. If responseMode is set to ExecuteURL, the path value has to be a server relative URL .
А если у меня страница на разных серверах по разному деплоится, корень приложения разный.

http://serverName/ AppName /Error/Index
vs
http://serverName/Error/Index

Что делать? Как быть? Кто виноват?
...
Рейтинг: 0 / 0
29.08.2014, 10:14
    #38732398
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Офигенные советы. Один повторяет предложенное мной и отвергнутое местным сообществом решение. Второй подходит только для детского сада. Что вообще происходит?

зы: Asp.Net УГ.
...
Рейтинг: 0 / 0
29.08.2014, 10:27
    #38732405
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КА если у меня страница на разных серверах по разному деплоится, корень приложения разный.
Не понял, ты одно и тоже приложение на разные сервера с разными корнями деплоишь? :)

http://www.asp.net/mvc/tutorials/deployment/visual-studio-web-deployment/web-config-transformations
...
Рейтинг: 0 / 0
29.08.2014, 10:36
    #38732411
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
МСУАлексей КА если у меня страница на разных серверах по разному деплоится, корень приложения разный.
Не понял, ты одно и тоже приложение на разные сервера с разными корнями деплоишь? :)Да. Оба деплоя в конфигурации Release. Что делать?

зы: Asp.Net УГ.
...
Рейтинг: 0 / 0
29.08.2014, 10:42
    #38732425
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КДа. Оба деплоя в конфигурации Release. Что делать?
Бред. Причем феерический. Что делать? Нагружать саппорт дополнительными задачами.
...
Рейтинг: 0 / 0
29.08.2014, 10:44
    #38732431
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
МСУАлексей КДа. Оба деплоя в конфигурации Release. Что делать?
Бред. Причем феерический. Что делать? Нагружать саппорт дополнительными задачами.Чтобы саппорт вебконфиг по месту правил? Вот это бред!

Предположим, что это коробочное решение. Хз на каком сервере будет установлено. Как быть?

зы: Asp.Net УГ.
зы: Asp.Net УГ.
зы: Asp.Net УГ.
...
Рейтинг: 0 / 0
29.08.2014, 10:50
    #38732441
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей К, что за паника? Необходимо для разных сред разные значения в конфигах прописать?
...
Рейтинг: 0 / 0
29.08.2014, 10:53
    #38732449
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КДа. Оба деплоя в конфигурации Release. Что делать?Добавить ещё конфигураций: TestServer, ProductionServer1, ProductionServer2.
Использовать Web Config Transformations, SlowCheetah XML Transforms.
...
Рейтинг: 0 / 0
29.08.2014, 10:58
    #38732459
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КЧтобы саппорт вебконфиг по месту правил? Вот это бред!

Предположим, что это коробочное решение. Хз на каком сервере будет установлено. Как быть?И как оно будет установлена, если не руками? Инсталлятором? Ну в нём и просите задать нужный параметр.
...
Рейтинг: 0 / 0
29.08.2014, 11:00
    #38732463
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
skyANAАлексей КДа. Оба деплоя в конфигурации Release. Что делать?Добавить ещё конфигураций: TestServer, ProductionServer1, ProductionServer2.
Использовать Web Config Transformations, SlowCheetah XML Transforms.А если таких мест установок 10, 20, 500? Для каждого деплоя делать специальный билд? Может тогда проще через Global.asax.cs , как я сразу предложил?
...
Рейтинг: 0 / 0
29.08.2014, 11:01
    #38732466
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
skyANAАлексей КЧтобы саппорт вебконфиг по месту правил? Вот это бред!

Предположим, что это коробочное решение. Хз на каком сервере будет установлено. Как быть?И как оно будет установлена, если не руками? Инсталлятором? Ну в нём и просите задать нужный параметр.Это не наш метод. На сервере есть информация о том, где установлено приложение. Это должно определяться автоматически.
...
Рейтинг: 0 / 0
29.08.2014, 11:04
    #38732469
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КskyANAпропущено...
Добавить ещё конфигураций: TestServer, ProductionServer1, ProductionServer2.
Использовать Web Config Transformations, SlowCheetah XML Transforms.А если таких мест установок 10, 20, 500? Для каждого деплоя делать специальный билд? Может тогда проще через Global.asax.cs , как я сразу предложил?Может конкретно уже опишите ситуацию?

У нас например 47 тестовых сред, за которыми следит СruiseСontrol. И у каждой из них своя конфигурация. И ничего, собираются себе автоматом, каждая по своему расписанию, или по кнопке Force Build.
...
Рейтинг: 0 / 0
29.08.2014, 11:07
    #38732473
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КskyANAпропущено...
И как оно будет установлена, если не руками? Инсталлятором? Ну в нём и просите задать нужный параметр.Это не наш метод. На сервере есть информация о том, где установлено приложение. Это должно определяться автоматически.То коробочное решение, что "Хз на каком сервере будет установлено", то оно уже установлено и есть какая-то информация о том, где.

Я запутался
...
Рейтинг: 0 / 0
29.08.2014, 11:11
    #38732478
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КЧтобы саппорт вебконфиг по месту правил? Вот это бред!
Юморист. Это прямая обязанность саппорта править конфиги, настраивать доступы, учетки. Например, у меня нет доступа к продуктиву. Делаю релиз, а конфиги правит саппорт, обновляет приложение.

Алексей КПредположим, что это коробочное решение. Хз на каком сервере будет установлено. Как быть?
Всё так же. Либо инсталлятор, либо конфиг руками.
...
Рейтинг: 0 / 0
29.08.2014, 11:12
    #38732480
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно реализовать 404 ошибку
Алексей КЭто должно определяться автоматически.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как правильно реализовать 404 ошибку / 25 сообщений из 70, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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