【问题标题】:ASP.NET Access controller properties from AuthorizeAttribute method来自 AuthorizeAttribute 方法的 ASP.NET 访问控制器属性
【发布时间】:2017-02-07 14:01:57
【问题描述】:

我使用 MVC 4 项目为 API 创建了一个基本控制器。一切都按我的意愿工作,但为了提高效率,我希望能够通过 OnAuthorization 方法从我的基本控制器访问一些自定义属性。我需要执行一些 SQL 查询以确保访问令牌有效等等。我宁愿做一次这个查询并将对象作为属性存储在控制器上,以便我以后可以访问它而无需再次进行查询。

简而言之,这就是我想要做的。

[APIActionFilter]
public class APIBaseController : ApiController
{
    public APIClient client;
    public class APIActionFilter : System.Web.Http.AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext filterContext)
        {
            //get data from the database. 
            Controller.client = objectmadefromdb;
        }
    }
}

一定有对这个对象的引用在某处传递?

【问题讨论】:

  • 检查filterContext.ControllerDescriptor
  • 不确定它会有多大帮助,但我做了类似的事情,在自定义授权属性中进行数据库调用。见这里:SO link

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


【解决方案1】:

第一条评论是大意的,但不正确。我能够使用以下方法来完成这项工作

public override void OnAuthorization(HttpActionContext filterContext)
{
    var controllerRef = filterContext.ControllerContext.Controller as APIBaseController;
    controllerRef.userdata = new user("123");
}

我现在可以从主控制器访问属性。我能够在 APIBaseController 对象上设置一些公共属性并直接为它们赋值。当然可以使用 getter 和 setter 之类的。

为了确认它有效,我能够创建一个继承基本控制器的新控制器。从该控制器中的任何操作,我都能够访问 APIBaseController 对象的属性,并且它们填充了我在 OnAuthorization 方法中设置的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多