【问题标题】:Stop Controller constructor execution if invalid authorization如果授权无效,则停止控制器构造函数执行
【发布时间】:2023-03-24 22:59:02
【问题描述】:

我正在使用用 c# 构建的 Web API 项目,其中有一些控制器。

控制器有自己的构造方法,我在构造方法中检查身份验证。

当身份验证成功时,它应该执行所需的功能,否则我希望它返回 JSON 作为无效授权。

我有以下代码可以做到这一点:-

public class UsersController : Controller
    {
        private RM.Data.IUserData _userData;

        private String APIToken = AppConfig.GetConfigValue("APIToken");

        public UsersController()
        {
            if (match)
            {
                  // then execute function
            }
            else
            {
                  // stop execution
            }
        }

    }

我尝试了以下方法来停止函数的执行。

return;
HttpResponse.End();
System.Threading.Thread.CurrentThread.Interrupt();
System.Threading.Thread.CurrentThread.Abort();
System.Web.HttpContext.Current.Response.Close();
Enviorment.Exit(0);
Enviorment.Exit(1);
Enviorment.Exit(-1);

有些会终止应用,有些则让 api 继续处理。

我有大约 50 个 API,无法将此函数附加到每个 API。在这种情况下可以做什么。

上面没有对我有用。各位大神能帮忙吗?

【问题讨论】:

  • 你做错了。研究过滤器。
  • 这尖叫XY Problem。为什么要在控制器 constructor 中进行身份验证和繁重的处理?

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


【解决方案1】:

在构造函数中,我正在检查身份验证。

这是非常错误的。您至少应该在控制器级别使用[Authorize] 属性。如果您正在执行自定义授权逻辑,请在 web api 管道中的Authentication Filter 中执行它。见https://exceptionnotfound.net/the-asp-net-web-api-2-http-message-lifecycle-in-43-easy-steps-2/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多