c#自定义属性属性的web-api值

时间:2015-01-13 14:05:53

标签: c# asp.net-web-api

目前我正在使用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?";
}

0 个答案:

没有答案