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
您可以创建自定义动作过滤器,并在限制动作时填充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")]