目前我正在使用C#WebApi。
我创建了自己的TokenAuthorizationAttribute,它检查" Authorization" -Header中的字符串是否与数据库中的字符串匹配。 这很好用,我可以用属性装饰控制器和方法,但它可以工作。
但是现在我试图编写一个使用传递的令牌的方法。当然我可以再次读出标题,但我不想这样做,因为它需要时间(并且方法必须快速工作)。我想过可能会将令牌保存到TokenAuthorizationAttribute的属性中,但是如何在我的方法中获取它的值呢?
这是我的属性的代码:
public class TokenAuthorizationAttribute : AuthorizationFilterAttribute {
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) {
public string Token {get; set;}
IEnumerable<string> values;
if (actionContext.Request.Headers.TryGetValues("Authorization", out values)) {
string token = values.FirstOrDefault();
string auth = String.Empty;
SqlConnection conn = SqlService.OpenConnection();
SqlCommand cmd = new SqlCommand("SELECT-Token-Statement", conn);
auth = (string)cmd.ExecuteScalar();
conn.Close();
if (!string.IsNullOrEmpty(auth)) {
Token = auth;
base.OnAuthorization(actionContext);
}
else {
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized) {
ReasonPhrase = "Wrong Token"
};
}
}
else{
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized){
ReasonPhrase = "Missing Token"
我的方法看起来像这样:
[TokenAuthorization]
public static void MyMethod(string value) {
string token = "How do i get the Token?";
}