【问题标题】:Using an attribute to prematurely return from a method使用属性过早地从方法返回
【发布时间】:2011-04-16 18:56:56
【问题描述】:

是否可以创建一个检查条件的属性,然后根据该条件停止被修饰的方法执行或让被修饰的方法继续执行?

现在是显而易见的问题。如果是这样,怎么做?如果没有,那么有没有值得一试的解决方法?

此属性的总体目标是,在 ASP.NET MVC 中,检查用户是否已获得授权,如果未获得授权,则返回特定的 JsonResult(在属性中定义)或让修饰的方法保留在执行。我看到的明显问题是,如果控制器操作的类型不同于ActionResultJsonResult,则存在运行时错误的可能性。

【问题讨论】:

    标签: c# attributes custom-attributes


    【解决方案1】:

    对于您的特定情况,您可以使用 ASP.NET MVC 过滤器 来做您需要的事情。让您的属性扩展 AuthorizeAttribute

    public class MustHaveFooAccessAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            // Return true or false after checking authorization
        }
    }
    

    【讨论】:

    • 那么在我从那里返回 false 之后,我将如何返回带有错误的 JSON?
    • 你可以覆盖 HandleUnauthorizedRequest
    【解决方案2】:

    使用属性这是不可能的 - 属性在编译时被解析。它们不会在运行时执行。

    具有“控制”属性的特定行为是通过反射来管理的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 2021-02-14
      • 1970-01-01
      • 2020-07-07
      • 2020-03-26
      • 2016-11-23
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多