正在查询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"共享。
我知道反射可以帮助我获得与函数相关的属性及其属性值。
但在这里,我不想从其他函数中获取值。我也不想只获取属性。
正如我前面提到的,当函数被调用时,属性将对此起作用。该属性所做的是从请求头中获取一些数据,并进行一些处理并生成一个值。现在,这个值必须在之后传递给函数。
好吧,你想要实现的当然是可能的,但这不是对运行时或MVC模型的最佳使用。
在这种特殊情况下,可以将属性视为注释。它是用来标记函数、控制器等的东西,这样它的执行在运行时会有不同的行为。属性本身不应该做大部分工作,而应该只是向设计中的其他部分发出不同行为的信号。
似乎您想要检查一些标头值,并在此基础上计算一些内容。您可以使用Request类之外的扩展方法来实现这一点。
现在,假设在Controller的函数中,您希望保证头值的存在。您可以有一个名为RequireHeaderValues的属性来实现IActionFilter。该属性将检查标头中所需的值,如果这些值不存在,则将响应路由到另一个位置,或者以某种方式指示错误。这样,当在函数内部调用Request对象之外的扩展方法时,就可以保证这些值的存在。MVC运行时将自动为您调用筛选器属性。有关更多信息,请参阅此。