【问题标题】:WebApi - How to restrict the call base on the certain conditionsWeb Api - 如何根据特定条件限制调用
【发布时间】:2015-07-18 11:09:10
【问题描述】:

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

谢谢,

普拉提克

【问题讨论】:

  • 类似Authentication?
  • 考虑使用DelegatingHandlers
  • 向我们展示你的方法
  • 在这种情况下使用MessageHandler。您可以使用它稍微修改调用。
  • 我在原始问题中添加了更多细节。我对 WebApi 很陌生。我会研究建议的方法。

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


【解决方案1】:

您可以创建自定义操作过滤器,如果操作受到限制,则填写Response 以便prevent action execution。使用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

【讨论】:

    【解决方案2】:

    您需要创建自己的类并从 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")]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2012-12-08
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多