C# 如何使用webapi 2将数据从AuthorizeAttribute传递到控制器?
我创建了一个自定义的AuthorizeAttribute,用于验证用户的一些OAuth凭据 一旦我得到了有效的用户,我想将响应数据返回给控制器,我如何在WebAPI.net中实现这一点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
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?我的意思是,如果两个用户同时将其设置为不同的值,那么会发生什么?是的,请求属性是特定于用户的