Синтаксис квадратной скобки в параметре функции в С#?

Я изучаю ASP.NET и наткнулся на это объявление метода:

public IQueryable<Product> GetProducts([QueryString("id")] int? categoryId) {.....}

В уроке сказано, что categoryId будет равно строке запроса "id" (от URL, например, & id = 5), но вопрос заключается в том, что называется [QueryString("id")] синтаксисом? Является ли это пригодным для использования вне ASP.NET и каково будет применение этого?

Ответ 1

Это применит атрибут QueryStringAttribute к параметру categoryId. Это просто атрибут, как и те, которые вы, вероятно, больше привыкли видеть в методах или классах, например:

[STAThread]
static void Main()
{
}

В этом случае, предположительно, какая-то часть фреймворка (я не разработчик ASP.NET, поэтому не могу указать, что именно) использует отражение, чтобы найти все методы, найти любые значения QueryStringAttribute к параметрам, а затем сопоставление имен внутри этих атрибутов с именами в строке запроса, а затем извлечение совпадающих значений для перехода в вызов метода (снова с использованием отражения).