WebApi -如何在特定条件下限制调用

本文关键字:条件下 调用 WebApi | 更新日期: 2023-09-27 18:03:32

我需要为我的应用程序打开/关闭一些特性。我正在使用WebApi,对于每个功能,我们都创建了单独的控制器/类,其中包含针对该特定功能的WebApi调用。

当任何WebApi调用来到控制器时,我想检查DB中的标志,并基于该标志,我想允许/拒绝WebApi调用。有什么建议吗?

管理员可以随时打开/关闭功能(也在部署之后)。下面是我的示例代码:

 [RoutePrefix("api/Customer")]
 [Authorize(Roles = "ABC")]
 public class MyController : ApiController
{
[HttpPut]
    [Route("{xyz}/abcd")]
    [Authorize(Roles = "ABC")]
    public async Task<IModel> CreateCust(string username)
    {
}
[HttpPut]
    [Route("{test}/test")]
    [Authorize(Roles = "ABC")]
    public async Task<IModel> UpdateCust(string username)
    {
}
}

谢谢,

Pratik

WebApi -如何在特定条件下限制调用

您可以创建自定义动作过滤器,并在限制动作时填充Response,以防止动作执行。使用System.Web.Http.Filters.ActionFilterAttribute:

public class RestrictionCheckAttribute : ActionFilterAttribute 
{
    public override void OnActionExecuting(HttpActionContext actionContext) 
    {
        if (IsActionRestricted(actionContext))
        {
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden);
        }
        base.OnActionExecuting(actionContext);
    }
    private bool IsActionRestricted(HttpActionContext actionContext)
    {
        // Add your restriction check logic here.
    }
}

然后用该属性装饰需要检查的操作。如果你需要在所有动作之前执行该逻辑,你可以通过HttpConfiguration注册全局动作过滤器。

您需要创建自己的类并继承System.Web.Http.AuthorizeAttribute。

然后你需要重写OnAuthorization并在那里添加额外的逻辑。

public class CustomAuth : System.Web.Http.AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            base.OnAuthorization(actionContext);

            // Check if for your database value in here
        }
    }

[CustomAuth(Roles = "ABC")]代替[Authorize(Roles = "ABC")]