Универсальная Попытка:
class Program
{
static void Main(string[] args)
{
var z = 0;
var a = 0.AsDefaultFor(() => 1 / z);
Console.WriteLine(a);
Console.ReadLine();
}
}
public static class TryExtensions
{
public static T AsDefaultFor<T>(this T @this, Func<T> operation)
{
try
{
return operation();
}
catch
{
return @this;
}
}
}
Поднятый это на проекте CodePlex, если Вы хотите.
То, что вы ищете, может быть достигнуто с помощью библиотеки AOP, например PostSharp ( http://www.postsharp.org/ ). Это сложнее, чем использование атрибута Authorize в mvc, но все же довольно просто.
Это не должно быть слишком сложно - есть несколько мест, где вы можете отразить атрибут и обработать его соответствующим образом:
При запуске приложения в Global.asx вы можете настроить маршрутизацию и расположение для представлений
Базовые события запроса ASP.Net все еще активны, так что вы можете переопределить одно из них
Создайте свой собственный базовый контроллер и переопределите OnActionExecuting
Обновите после комментария
Ах, Понимаю. В этом случае, если вы совершаете прямые звонки, вам следует ознакомиться с Code Access Security , что, я думаю, охватывает то, что вы имеете в виду.
В качестве альтернативы пользовательский атрибут может иметь смысл, если вы используете своего рода шаблон фабрики - тогда вызов отражения, который получает фабрику, может проверить атрибуты.
Если вы '
Другой способ справиться с этим - использовать атрибут [PrincipalPermission]
на уровне обслуживания. Это может помешать вызывающим абонентам выполнить метод (или получить доступ ко всему классу) без определенной авторизации.
Нет, AuthorizeAttribute работает, потому что инфраструктура MVC явно вызывает его перед вызовом метода. Аналогичная функция для вашего уровня обслуживания будет работать только в том случае, если ваши клиенты также явно вызвали ее. Было бы неразумно предполагать, что даже благонамеренный клиент всегда будет помнить, что нужно искать атрибут и вызывать его. WCF имеет собственную безопасность . Вам следует использовать это вместо того, чтобы писать свои собственные.