C# 如何使用webapi 2将数据从AuthorizeAttribute传递到控制器?

C# 如何使用webapi 2将数据从AuthorizeAttribute传递到控制器?,c#,asp.net-web-api,C#,Asp.net Web Api,我创建了一个自定义的AuthorizeAttribute,用于验证用户的一些OAuth凭据 一旦我得到了有效的用户,我想将响应数据返回给控制器,我如何在WebAPI.net中实现这一点 public class CustomAttribute : AuthorizeAttribute { protected override bool IsAuthorized(HttpActionContext actionContext) { var response = my

我创建了一个自定义的AuthorizeAttribute,用于验证用户的一些OAuth凭据

一旦我得到了有效的用户,我想将响应数据返回给控制器,我如何在WebAPI.net中实现这一点

public class CustomAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        var response = mydata.Result.Content.ReadAsStringAsync();
        if (mydata.Result.StatusCode == HttpStatusCode.OK)
        {
            // return response data to controller
            return true;
        }
    }
}
我搜索了我在mvc中得到的,它可以像下面这样完成

在控制器中—

_yourVariable = HttpContext.Items["test"];

由于在webapi中我没有方法AuthorizationCore和输入参数AuthorizationContext,如何在Web api中的System.Web.Http中实现这一点?

此方法可以工作,但不推荐使用

在您的非授权函数中-

protected override bool IsAuthorized(HttpActionContext actionContext)
{
    var response = mydata.Result.Content.ReadAsStringAsync();
    if (mydata.Result.StatusCode == HttpStatusCode.OK)
    {
        string someValue = "any value";
        actionContext.Request.Properties.Add(new KeyValuePair<string, object>("YourKeyName", someValue));
        return true;
    }
}

这种方法可行,但不推荐

在您的非授权函数中-

protected override bool IsAuthorized(HttpActionContext actionContext)
{
    var response = mydata.Result.Content.ReadAsStringAsync();
    if (mydata.Result.StatusCode == HttpStatusCode.OK)
    {
        string someValue = "any value";
        actionContext.Request.Properties.Add(new KeyValuePair<string, object>("YourKeyName", someValue));
        return true;
    }
}
在Web API 2.0中,HttpActionContext.Request.Properties等同于AuthorizationContext.HttpContext.Items。因此,您可以将项目添加到属性中,并通过Request.properties[keyName]在控制器中获取该项目

在Web API 2.0中,HttpActionContext.Request.Properties等同于AuthorizationContext.HttpContext.Items。因此,您可以将项目添加到属性中,并通过Request.properties[keyName]在控制器中获取该项目


例如,如果您在该控制器上定义了属性为MyProperty的MyController,则在“授权”中,您可能会有如下内容:

(filterContext.Controller as MyController).MyProperty= "any value";

在您的控制器中,您通常只需访问MyProperty

,例如,如果您在该控制器上定义了MyController的属性MyProperty,那么在授权中,您可能会有如下内容:

(filterContext.Controller as MyController).MyProperty= "any value";
在您的控制器中,您通常只需访问MyProperty

我使用这样的代码

 protected override bool AuthorizeCore(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            BaseApiController Controller = actionContext.ControllerContext.Controller as BaseApiController;
            baseApi.Property = 10;
            return Controller.IsAuthorize();
        }
我使用这样的代码

 protected override bool AuthorizeCore(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            BaseApiController Controller = actionContext.ControllerContext.Controller as BaseApiController;
            baseApi.Property = 10;
            return Controller.IsAuthorize();
        }

例如,通过容器和依赖项属性。在webapi中,我没有方法AuthorizationCore和输入参数AuthorizationContextThrough容器和依赖项属性。在webapi中,我没有方法AuthorizationCore和输入参数AuthorizationContextIs actionContext.Request.properties per user?我的意思是,如果两个用户同时将其设置为不同的值,那么会发生什么情况?是的,请求属性是用户特定的是actionContext.Request.properties per user?我的意思是,如果两个用户同时将其设置为不同的值,那么会发生什么?是的,请求属性是特定于用户的