我需要为我的应用程序打开/关闭某些功能。我正在使用WebApi,对于每个功能,我们都创建了单独的控制器/类,其中包含对该特定功能的WebApi调用。
当任何WebApi调用到达控制器时,我想检查数据库中的标志并基于该标志我想允许/拒绝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
答案 0 :(得分:1)
您需要创建自己的类并从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
}
}
然后代替[Authorize(Roles = "ABC")]
[CustomAuth(Roles = "ABC")]
答案 1 :(得分:1)
您可以创建自定义操作过滤器,如果操作受到prevent action execution限制,请填写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.
}
}
然后装饰需要使用该属性检查的操作。如果您需要在所有操作之前执行该逻辑,您可以register global action filter到HttpConfiguration
。