使用属性提前从方法返回

发布于 2024-11-01 23:21:12 字数 281 浏览 5 评论 0原文

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

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

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

Is it possible to make an attribute that checks a condition and then based on that condition either stop the decorated method from executing or let the decorated method continue on executing?

And now the obvious question. If so, how? If not, then is there a work around worth checking out?

The overall goal of this attribute is to, in ASP.NET MVC, check if a user is authorized and either return a particular JsonResult (defined in the attribute) if they aren't authorized or let the decorated method keep on executing. The obvious problem I see with this being possible is if the controller action is of a different type than ActionResult or JsonResult that there exists the possibility of a runtime error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

待天淡蓝洁白时 2024-11-08 23:21:12

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

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

For your particular situation, you can use an ASP.NET MVC filter to do what you need. Have your attribute extend AuthorizeAttribute.

public class MustHaveFooAccessAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        // Return true or false after checking authorization
    }
}
失而复得 2024-11-08 23:21:12

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

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

This is not possible using attributes - attributes are resolved at compile time. They do not get executed during runtime.

Specific behavior that attributes "control" is managed through reflection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文