WebApi - 如何在特定条件下限制呼叫基础

时间:2015-07-18 11:09:10

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

我需要为我的应用程序打开/关闭某些功能。我正在使用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

2 个答案:

答案 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 filterHttpConfiguration