2013-03-28 48 views
12

我正在学习ASP.NET和偶然发现了这种方法声明:函数的参数在C#中的方括号语法?

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

教程说categoryId将等于查询字符串“ID”(从网址,像& ID = 5),但问题是,什么是[QueryString("id")]语法调用?这是否可用于ASP.NET以外,这将是什么应用?

回答

15

这就是将QueryStringAttribute属性应用于参数categoryId。这只是一个属性,就像那些你可能更习惯于看到在方法或类,像这样:

[STAThread] 
static void Main() 
{ 
} 

在这种情况下,框架(我不是一个ASP的大概某些部分。 NET开发人员,所以我不能指出正好是什么)使用反射来查找所有的方法,找到任何QueryStringAttribute值应用于参数,然后将这些属性中的名称与查询字符串中的名称匹配,然后提取匹配值以传入方法调用(再次使用反射)。

+0

“属性”的意思是这个:http://msdn.microsoft.com/en-us/library/z0w1kczw(v=vs.80).aspx 该属性用于描述数据? AFAIK属性只是一个元数据,它如何变成真正的价值并适用于categoryId? – 5argon

+0

@Sargon:它是元数据,是的 - 它应用于参数本身......而ASP.NET能够使用这些元数据来计算出如何自动调用GetProducts。将编辑提到的答案。 –

+1

感谢有关反射的答案。对于有兴趣在这里编写自己的属性和反射技术的人,我刚刚阅读的网页是:http://msdn.microsoft.com/en-us/library/z919e8tw(v=vs.80).aspx – 5argon