System.Web.Http.Authorize与System.Web.Mvc.Authorize

phi*_*ady 59 asp.net asp.net-mvc asp.net-web-api

哪个授权属性?
System.Web.Http.Authorize
System.Web.Mvc.Authorize

using System.Web.Mvc      // or
using System.Web.Http  
Run Code Online (Sandbox Code Playgroud)

典型的控制器

    [Authorize]
    public class SomeController : Controller
Run Code Online (Sandbox Code Playgroud)

我们有控制器注释[Authorize] 我注意到由于使用命名空间,注释在技术上引用了不同的属性类.

该项目包含MVC控制器和WEBAPI控制器.

我应该使用哪一个?为什么?如果我不解决这个问题,我们可能会遇到什么问题?

Bad*_*dri 78

您必须使用System.Web.Http.Authorize针对ApiController(API网络控制器)和System.Web.Mvc.Authorize反对Controller(MVC控制器).由于框架将过滤器作为管道处理的一部分运行,并且控制器期望应用正确的过滤器,因此如果不使用相应的过滤器,则授权将不起作用.

  • @Mike它可以通过编写`public sealed class AuthAttribute:System.Web.Mvc.AuthorizeAttribute {protected override bool AuthorizeCore(HttpContextBase httpContext)=> false来凭经验证明; 将它放在`ApiController`上,并在Visual Studio中设置断点.观察到`AuthorizeCore`从未被调用,并且请求被提供在被拒绝的地方. (4认同)