Как проверить текущий ресурс запроса на странице в C # ASP.NET? - PullRequest
10 голосов
/ 19 января 2012

У меня есть реализация IHttpModule с делегированным методом, подключенным к PostAcquireRequestState, для каждого HTTP-запроса я хотел бы знать , как проверить, является ли текущий запрашиваемый ресурс Page (aspx) различая все другие ресурсы, такие как *.css, *.ico, *.png и т. д.

На самом деле я могу сделать следующее:

private static void OnPostAcquireRequestState(object sender, EventArgs e)
{
  bool isPage = HttpContext.Current.Request.Path.EndsWith(".aspx");
}

Но я хотел бы знать, еслиэто нечто иное, чем жесткая проверка с ".aspx".

1 Ответ

3 голосов
/ 19 января 2012

Вы можете получить список зарегистрированных обработчиков HTTP и проверить, обрабатываются ли они системным классом.Предполагая, что вы не называете свои собственные классы в пространстве имен System.*, это вполне надежно:

using System.Configuration;
using System.Web.Configuration;

Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
HttpHandlersSection handlers = (HttpHandlersSection) config
                               .GetSection("system.web/httpHandlers");

List<string> forbiddenList = new List<string>();

// next part untested:
foreach(HttpHandlerAction handler in handlers.Handlers)
{
    if(handler.Type.StartsWith("System."))
    {
        forbiddenList.Add(handler.Path);
    }
}

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...