如何将数据从自定义授权属性传递到web api操作方法?

时间:2016-03-10 16:47:03

标签: asp.net-mvc asp.net-web-api2

我正在创建一个MVC Web API应用程序,其中包含Web API控制器以及常规MVC控制器的表单身份验证。在表单身份验证cookie中,我存储了我需要阅读的用户信息,并将其传递给Web API操作方法。 我试图通过创建自定义Authorization属性并将此值添加到ActionArguments来实现此目的。但是,我不知道如何在Web API操作中访问此数据。下面是代码块

public class MyAuthorization : AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            var isAuthorised = base.IsAuthorized(actionContext);

            if (isAuthorised)
            {
                var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
                var ticket = FormsAuthentication.Decrypt(cookie.Value);
                var identity = new GenericIdentity(ticket.Name);
                actionContext.ActionArguments["UserInfo"] = ticket.UserData;

            }
        }
    }

这是控制器代码

[RoutePrefix("api/test")]
    [MyAuthorization]
    public class TestWebAPIController : ApiController
    {
        [HttpGet]
        [Route("")]       
        public IHttpActionResult Get() {
            //How to get it here
            return Ok();
        }
    }

1 个答案:

答案 0 :(得分:0)

这真是我的愚蠢。顾名思义它就是ActionArgument(actionContext.ActionArguments)。因此,可以通过ActionContext.ActionArguments在Web API控件中轻松访问,也可以直接通过传递操作参数来访问。

以下是ActionContext.ActionArguments

的代码示例
public IHttpActionResult Post() {
            var userInfo = ActionContext.ActionArguments["UserInfo"];
            return Ok();
        }

这是通过行动参数

  public IHttpActionResult Post(UserInfo userinfo) {
       //Code here
        return Ok();
     }