【问题标题】:Pass a value from route to custom attribute将值从路由传递到自定义属性
【发布时间】:2021-01-26 21:37:37
【问题描述】:

我创建了一个自定义属性,我需要将一个值从路由传递给这个属性,我该怎么做?

public class MyAttribute : Attribute
{
    public MyAttribute(string myvalue)
    {
        // use myvalue...
    }
}

[MyAttribute]
[Route("/action/{myvalue}")]
public IActionResult Action(string myvalue)
{
   
}

【问题讨论】:

  • 如果你的意思是这是一个asp.net core的问题,你需要IHttpContextAccessor而不是HttpContextBaseasp.net core在世界上已经消失了。

标签: c# asp.net-core


【解决方案1】:

你可以将HttpContextAccessor注入你的属性类,然后读取路由参数

public class MyAttribute : Attribute
{
    private readonly HttpContextAccessor _accessor;

    public MyAttribute(HttpContextAccessor accessor)
    {
        _accessor = accessor; 
        var myValue = _accessor.HttpContext.Request.RouteValues.GetValueOrDefault["myValue"];
        // ...
    }
}

【讨论】:

  • 当他将他的问题标记为 asp.net-core 时,您非常了解 OP 的问题,但看起来它实际上是针对旧的 asp.net,因为在 asp.net-core @987654321 中没有 HttpContextBase @所以答案和问题都让读者感到困惑,真的很糟糕。至少您应该在回答中提到这一点。
  • OP [MyAttribute] 也使用了这个属性,这怎么能用呢?我们有办法使用它,但实际上这个答案并没有谈到这一点,而且 OP(在他的理解水平上)似乎自动知道如何使用该属性,真是个天才。
  • 从逻辑上讲不,这太奇怪了。真的就像你和 OP 是一个人,真的或者至少在现实生活中有一些亲密的关系。
  • 不客气。顺便说一句,这是值得的,因为正如我所说的那样令人困惑。除非有人编辑问题的标签以将asp.net-core 替换为asp.net
  • 如何在我的控制器中使用这个属性?
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2016-11-14
  • 2019-03-17
  • 2019-08-07
  • 1970-01-01
  • 2019-12-30
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多