C# 控制器构造函数中的Web API读取头值
可以在web API控制器的构造函数中获取头信息吗?我想根据标题值设置变量,但我不想对每个方法都这样做。我对自定义头值特别感兴趣,但此时我会接受授权值。我可以让它在C# 控制器构造函数中的Web API读取头值,c#,asp.net-web-api,C#,Asp.net Web Api,可以在web API控制器的构造函数中获取头信息吗?我想根据标题值设置变量,但我不想对每个方法都这样做。我对自定义头值特别感兴趣,但此时我会接受授权值。我可以让它在AuthorizationFilterAttribute中工作,但我也需要在控制器级别使用它 [PolicyAuthorize] public class PoliciesController : ApiController { public PoliciesController() { var x =
AuthorizationFilterAttribute
中工作,但我也需要在控制器级别使用它
[PolicyAuthorize]
public class PoliciesController : ApiController
{
public PoliciesController()
{
var x = HttpContext.Current; //will be null in constructor
}
public HttpResponseMessage Get()
{
var x = HttpContext.Current; //will be available but too late
}
}
public class PolicyAuthorizeAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var authHeader = actionContext.Request.Headers.Authorization; //can get at Authorization header here but no HTTPActionContext in controller
}
}
下面是一些你可以考虑的选项…更喜欢<代码> 1。< /代码>过<代码> 2。< /代码>
HttpRequestMessage.properties
中存储其他数据,并在控制器中具有方便的属性,控制器中的所有操作都可以访问该属性
[CustomAuthFilter]
public class ValuesController : ApiController
{
public string Name
{
get
{
return Request.Properties["Name"].ToString();
}
}
public string GetAll()
{
return this.Name;
}
}
public class CustomAuthFilter : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
actionContext.Request.Properties["Name"] = "<your value from header>";
}
}
[CustomAuthFilter]
公共类值控制器:ApiController
{
公共字符串名
{
得到
{
return Request.Properties[“Name”].ToString();
}
}
公共字符串GetAll()
{
返回此.Name;
}
}
公共类CustomAuthFilter:AuthorizationFilterAttribute
{
授权时的公共覆盖无效(HttpActionContext actionContext)
{
actionContext.Request.Properties[“Name”]=“”;
}
}
[CustomAuthFilter]
public class ValuesController : ApiController
{
public string Name { get; set; }
public string GetAll()
{
return this.Name;
}
}
public class CustomAuthFilter : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
ValuesController valuesCntlr = actionContext.ControllerContext.Controller as ValuesController;
if (valuesCntlr != null)
{
valuesCntlr.Name = "<your value from header>";
}
}
}
[CustomAuthFilter]
公共类值控制器:ApiController
{
公共字符串名称{get;set;}
公共字符串GetAll()
{
返回此.Name;
}
}
公共类CustomAuthFilter:AuthorizationFilterAttribute
{
授权时的公共覆盖无效(HttpActionContext actionContext)
{
ValuesController valuesCntlr=actionContext.ControllerContext.Controller作为ValuesController;
如果(值cntlr!=null)
{
valuesCntlr.Name=“”;
}
}
}
我使用System.Web.HttpContext.Current.Request.Headers作为这个porpose