Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi自定义授权属性不起作用_C#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# WebApi自定义授权属性不起作用

C# WebApi自定义授权属性不起作用,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我需要从active directory保护一个或多个特定用户的web api,在web.config中,我有以下代码: <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, Public

我需要从active directory保护一个或多个特定用户的web api,在web.config中,我有以下代码:

<configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

    <section name="users" type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  </configSections> 
  <users> 
    <add key="user" value="domain\loginname" /> 
  </users> 
  <system.web> 
    <authentication mode="Windows" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
  </system.web>
在IIS中,唯一启用的方法是Windows身份验证

当我从另一台计算机浏览到该站点时,我会看到“身份验证”窗口,但上面显示的authoze方法从未被点击

这是一个很好的帖子,引导我走向正确的方向(我相信)

  • 您应该在
    System.Web.Http
    中使用
    AuthorizeAttribute
    ,而不是
    System.Web.Mvc
  • 改为执行已授权的


  • 在我的例子中,在重构时,我的控制器类不再扩展ApiController。这是我的筛选器启动所必需的。

    谢谢您的帮助,现在点击了断点,但是我有一个问题,bool isAuthorized=base.isAuthorized(actionContext);仅在计算机的本地管理员处为true,即使我将另一个用户放在web.config users部分,它也会为HIMIAuthorized返回false。仅当用户登录到系统时为true,它不取决于用户的类型。如果您想要的不仅仅是简单的IsAuthenticated或IsInRole检查,那么您可以编写自己的授权属性并实现您想要的任何逻辑
    public class MyAuthorizeAttribute : AuthorizeAttribute
        {
    
            public MyAuthorizeAttribute(params string[] userKeys)
            {
                List<string> users = new List<string>(userKeys.Length); 
                var allUsers = (NameValueCollection)ConfigurationManager.GetSection("users");
                foreach (var userKey in userKeys)
                {
                    users.Add(allUsers[userKey]);
                }
    
                this.Users = string.Join(",", users);
            }
    
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                bool isAuthorized = base.AuthorizeCore(httpContext);
                bool isRequestHeaderOk = false;
                return isAuthorized && isRequestHeaderOk;
            }
        }
    
    [MyAuthorize("user")]
            [ResponseType(typeof(tblCargo))]
            public IHttpActionResult GettblCargosByActivo()
            {
                var query = from c in db.tblCargos
                            orderby c.strCargo
                            select c;
    
                //var result = Newtonsoft.Json.JsonConvert.SerializeObject(query);
                //return result;
    
                return Ok(query);
            }
    
    protected override bool IsAuthorized(HttpActionContext actionContext)
        {
            bool isAuthorized = base.IsAuthorized(actionContext);
            bool isRequestHeaderOk = false;
            return isAuthorized && isRequestHeaderOk;
        }