1

Я знаю, что вы можете добавить атрибут к методам в C#, подобный этому,C# Атрибут или атрибут

ex1.

[HttpPost] 
public void Method() 
{ 
//code 
} 

Что означает атрибут должен быть удовлетворен, чтобы запустить Method().

И я знаю, что вы можете сложить атрибуты, как это,

ех2.

[HttpPost] 
[RequireHttps] 
public void Method2() 
{ 
//More code 
} 

, который проверяет, что оба attribute1 «И» attribute2 удовлетворены, прежде чем вы можете использовать Method2().

Но можете ли вы «ИЛИ» атрибуты? Что-то вроде этого, может быть?

ex3.

[HttpPost || RequireHttps] 
public void Method3() 
{ 
    //Even more code 
} 

Так что, если либо атрибут довольствуется вы можете использовать Method3().

Редактировать: Извините, был под впечатлением Атрибуты, где назывались аннотации. Исправлено.

+0

Нет, вы не можете. Из любопытства, ваш пример академический, или это то, что вы пытаетесь достичь? – mccow002

+4

Это не аннотации. Это атрибуты. –

+2

Атрибуты (это то, что вы разместили в виде аннотаций) являются просто дополнительными метаданными. Они не применяют _anything_. – Oded

ответ

6

Это означает, аннотации должны быть выполнены, чтобы запустить метод()

Это недоразумение.

Атрибут [HttpPost] - это директива, этот метод будет соответствовать запросу Post. Это не «спрос», как проверка безопасности. Только некоторые атрибуты работают именно так.

Но при рассмотрении их как «требований»: они работают независимо, так что всегда будут приводить к поведению И.

+0

Забавно, что моя группа использует пользовательские атрибуты для обеспечения безопасности. И мне нужно либо аннотировать метод с проверкой на 1 из 2 сценариев, либо найти другой способ ограничить доступ к этому методу. Идеи? – Dan

+1

Пользовательский атрибут, как вы сказали .. и, возможно, PostSharp, чтобы сделать его проще .. Конечно, вы всегда можете сделать это в методе - if (! Permission.Validate (user, Permisisons.DoSomething)) throw new MyException(); - вид вещи – Evgeni

+1

Когда вы пишете свои собственные атрибуты и используете, например, строки для привилегий, вы можете сделать '[AuthorizeRequireOr (« Admin »,« Debugger »)]' –

1

В C# они не называются аннотациями, а атрибутами.
По умолчанию атрибуты не используются ни для чего, кроме как для украшения класса, метода, свойства и т. Д. Но через отражение вы можете использовать их в значительной степени, что вам нравится, как и ASP.NET MVC с HttpPost и RequireHttps.

К сожалению, они не могут быть OR'ed.

Смежные вопросы