将 IsLocal() 检查添加到 Web 中的单个控制器 Api

Add IsLocal() check to single Controller in Web Api

有没有办法向特定控制器添加 filter/IsLocal() 检查?

我从这个答案知道 () 我可以全局应用过滤器,但是有没有一种简单的方法可以在多个控制器的应用程序中仅将过滤器应用于单个控制器?

让我困惑的是,实际上有两个不同的 AuthorizeAttributes:

  • System.Web.Http.AuthorizeAttribute
  • System.Web.Mvc.AuthorizeAttribute(控制器使用这个)

首先,创建您的 LocalRequestOnly 授权属性。

using System.Web;
using System.Web.Mvc;

namespace myWebsite
{
    public class LocalRequestOnlyAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return httpContext.Request.IsLocal;
        }
    }
}

然后将 [LocalRequestOnly] 属性添加到 Controller 或 Action(两者都适用)。

[LocalRequestOnly]
public class HomeController : Controller
{...}