Это хороший способ, чтобы поймать всех в 404s .Net без игры с конфигурацией IIS?


Ситуация такова, что ее не всегда можно играть с веб.config или иметь доступ к IIS, было сказано, что мне пришлось придумать способ, чтобы поймать все 404s в .Net программы, для страницы aspx расширения его достаточно легко и в интернете полно идей... но для расширения aspx, который я сделал следующие, ищу советы, это хороший способ? их сценариях, где это могло произойти? это хорошо измерить производительность? спасибо за советы

После проверки своей паутины.Карта сайта ссылки и сделать мои изменения, блок "else" содержит следующие

string s = context.Server.MapPath(context.Request.AppRelativeCurrentExecutionFilePath);
if (!System.IO.File.Exists(s)){
    throw new HttpException(404, "Page not found");
}

и конечно, остальное обрабатывается ошибка приложения обработчик обратите внимание, что все CSS, JS-файлы, изображения и другие типы файлов пройти эту проверку

редактировать: кажется, две проблемы, быть настойчивым при регулярном поймать ошибки, HTML и понятные URL-адреса, они никогда не похоже, чтобы огонь 404s (предполагаю, что есть другие типы файлов, зависит от фильтров ISAPI)



4129
7
задан 2 декабря 2011 в 05:12 Источник Поделиться
Комментарии
3 ответа

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

public void Init(HttpApplication context)
{
// your code
context.Error +=new EventHandler(OnError);
}

private void OnError(object sender, EventArgs e)
{
int ec = ((HttpException)HttpContext.Current.Error).GetHttpCode();
if (ec == 404)
{
// do whatever you want
}
}

Если вы будете следовать этому пути, вы будете иметь преимущество, чтобы контролировать все коды ошибок свой путь и избежать раннего 404 капель в случае, если вы измените свой рерайт политики, ни логики.

1
ответ дан 11 декабря 2011 в 09:12 Источник Поделиться

Ответ, предоставленный мне в последнее время GregB может быть именно то, что вам нужно:

Что об использовании обработчик http-данных, отображенных на все запросы?

Вы должны добавить шаблон картографическое приложение, как описано здесь и правильно настроить ваш http-обработчик.

0
ответ дан 2 декабря 2011 в 05:12 Источник Поделиться

Так вот моя попытка дать решение.

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

    void Application_Start(object sender, EventArgs e)
{
// Get the current configuration file.
Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
CustomErrorsSection customErrorsSection = (CustomErrorsSection)configuration.GetSection("system.web/customErrors");

CustomError error = customErrorsSection.Errors.Get("404");
if (error==null)
{
// set as required
customErrorsSection.Mode = CustomErrorsMode.On;

error = new CustomError(404, "NotFoundPage.aspx");
customErrorsSection.Errors.Add(error);
configuration.Save(ConfigurationSaveMode.Modified);
}
}

При изменении веб-страницы.Конфиг нужно ставить условия, как это требуется, что вы можете в конечном итоге зацикливания.

Будьте осторожны там

Надеюсь, что это поможет.

0
ответ дан 10 декабря 2011 в 04:12 Источник Поделиться