При записи Пользовательского атрибута в C# как ASP.NET MVC Авторизовывают атрибут

Универсальная Попытка:

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, если Вы хотите.

5
задан Ajay 29 July 2009 в 13:13
поделиться

4 ответа

То, что вы ищете, может быть достигнуто с помощью библиотеки AOP, например PostSharp ( http://www.postsharp.org/ ). Это сложнее, чем использование атрибута Authorize в mvc, но все же довольно просто.

5
ответ дан 14 December 2019 в 04:44
поделиться

Это не должно быть слишком сложно - есть несколько мест, где вы можете отразить атрибут и обработать его соответствующим образом:

  • При запуске приложения в Global.asx вы можете настроить маршрутизацию и расположение для представлений

  • Базовые события запроса ASP.Net все еще активны, так что вы можете переопределить одно из них

  • Создайте свой собственный базовый контроллер и переопределите OnActionExecuting


Обновите после комментария

Ах, Понимаю. В этом случае, если вы совершаете прямые звонки, вам следует ознакомиться с Code Access Security , что, я думаю, охватывает то, что вы имеете в виду.

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

Если вы '

0
ответ дан 14 December 2019 в 04:44
поделиться

Другой способ справиться с этим - использовать атрибут [PrincipalPermission] на уровне обслуживания. Это может помешать вызывающим абонентам выполнить метод (или получить доступ ко всему классу) без определенной авторизации.

2
ответ дан 14 December 2019 в 04:44
поделиться

Нет, AuthorizeAttribute работает, потому что инфраструктура MVC явно вызывает его перед вызовом метода. Аналогичная функция для вашего уровня обслуживания будет работать только в том случае, если ваши клиенты также явно вызвали ее. Было бы неразумно предполагать, что даже благонамеренный клиент всегда будет помнить, что нужно искать атрибут и вызывать его. WCF имеет собственную безопасность . Вам следует использовать это вместо того, чтобы писать свои собственные.

1
ответ дан 14 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: