0

我试图上网,但我无法得到任何与我想要的东西有关的东西。

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

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

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

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

4

1 回答 1

1

好吧,您想要完成的事情当然是可能的,但这不是运行时或 MVC 模型的最佳使用。

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

似乎您想检查一些标头值,并据此计算一些东西。您可以使用Request 类的扩展方法来完成此操作。

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

于 2013-08-07T05:33:40.297 回答