正在查询C#属性

本文关键字:属性 查询 | 更新日期: 2023-09-27 18:26:37

我试过上网,但找不到任何与我想要的相关的东西。

这与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"共享。

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

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

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

正在查询C#属性

好吧,你想要实现的当然是可能的,但这不是对运行时或MVC模型的最佳使用。

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

似乎您想要检查一些标头值,并在此基础上计算一些内容。您可以使用Request类之外的扩展方法来实现这一点。

现在,假设在Controller的函数中,您希望保证头值的存在。您可以有一个名为RequireHeaderValues的属性来实现IActionFilter。该属性将检查标头中所需的值,如果这些值不存在,则将响应路由到另一个位置,或者以某种方式指示错误。这样,当在函数内部调用Request对象之外的扩展方法时,就可以保证这些值的存在。MVC运行时将自动为您调用筛选器属性。有关更多信息,请参阅此。