В PreRequestHandlerExecute определите имя класса в файле .asmx - PullRequest
0 голосов
/ 06 июля 2011

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

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

Если не считать открытия файла и его синтаксического анализа - есть ли способ, который, учитывая путь запроса к файлу asmx, позволяет получить ссылку либо на тип класса внутри, либо на имя типа класса внутри?

Довольно плохо знаком с .NET, поэтому то, что я делаю, может быть глупым. Но в любом случае мне будет интересен ответ:)

РЕДАКТИРОВАТЬ: Это не мой проект, и он заблокирован для использования ASP.NET 3.5 и asmx webservices

РЕДАКТИРОВАТЬ: цель состоит в том, чтобы иметь возможность предотвратить выполнение определенных веб-сервисов неаутентифицированными пользователями без добавления кода аутентификации для каждого веб-метода. Моя идея состояла в том, чтобы использовать пользовательский атрибут в веб-методах, помечая их как общедоступные, и только пользовательский модуль HTTP или обработчик может выполнять их неаутентифицированному пользователю. Тип пользователя хранится в сеансе.

1 Ответ

1 голос
/ 06 июля 2011

Прежде всего, я предлагаю вам переключиться на веб-службы WCF, поскольку asmx теперь считается устаревшими технологиями (см. MSDN ).WCF имеет несколько точек расширения в своем конвейере, которые должны соответствовать вашим целям.

Теперь сказано, что одним из способов взлома может быть установка собственного обработчика или фабрики обработчиков для файлов asmx, а затем использование Метод WebServiceParser.GetCompiledType для получения фактического типа сервиса asmx, проверьте ваши атрибуты.Затем вы можете использовать WebServiceHandlerFactory.GetHandler для создания фактического обработчика и выполнения запроса.

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

РЕДАКТИРОВАТЬ : Если вы хотите защитить весь asmx или каталог, это может быть легко возможно с использованием встроенной авторизации - например:

<location path="secure.asmx">
 <system.web>
   <authorization>
     <allow users="*" />
     <deny users="?" />
   </authorization>
 </system.web>
</location>

Это позволит получить доступ всем аутентифицированным пользователям и запретить анонимным пользователям.

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

...