查询C#属性

时间:2013-08-07 03:18:12

标签: c# asp.net-mvc-4

我曾试图上网但我无法得到任何与我想要的相关的信息。

这与ASP.Net有关。但也可以是任何其他实例。

以下是我的属性

class  SomeAttribute :Attribute
{
    string someparam;
    string SomeParam
    {
         get{ return someparam;}
         set { someparam = val;}
         //the value generated for someparam is dynamically generated with respect to some attribute present in the request header.
    }
 }

类似于.net在其asp .net成员资格中使用的[Authorize]属性来验证用户是否已登录,如果验证失败,它会将其重定向回登录页面。

我有一个与下面的方法相关联的属性:

   [SomeAttribute] 
     public void someFunction
    {
      //i want to retrieve here the value of someparam jus generated before entering this method.
     }

请注意,我没有传递任何值或在此属性中使用任何命名属性。只要调用方法,它就会为我检查一个条件,并返回true或false,因此调用该函数。

在我的情况下,在验证之后,它会生成一个值,并且该值必须与它所关联的函数共享'somefunction'。

我知道反射可以帮助我获得与函数相关的属性及其属性的值。

但是在这里我不想从其他函数中获取值。我也不想只是获取属性。

正如我之前提到的,当调用该函数时,该属性将对此起作用。该属性的作用是从请求标头中提取一些数据并进行一些处理并生成一个值。现在,此值必须在此之后传递给函数。

1 个答案:

答案 0 :(得分:1)

嗯,你想要实现的目标当然是可能的,但它不是运行时或MVC模型的最佳使用。

在这种特殊情况下,将属性视为注释。这是您用来标记函数,控制器等的东西,以便它的执行在运行时表现不同。属性本身不应该完成大部分工作,而只是向设计中的其他部分发出信号以表现不同。

好像你想检查一些标题值,并根据它计算一些东西。您可以使用Request extension methods来完成此任务。

现在,假设在Controller的功能中,您希望保证标头值存在。您可以拥有一个名为RequireHeaderValues的属性来实现IActionFilter。该属性将检查标头中是否存在所需值,如果它们不存在,则将响应路由到另一个位置或以某种方式指示错误。这样,当您在函数内部调用Request对象的扩展方法时,可以保证值存在。 MVC运行时将自动为您调用filter属性。有关详细信息,请参阅this