需要一些自定义ASP.NET MVC IAuthorizationFilter类的帮助/建议

时间:2009-09-12 04:50:49

标签: asp.net-mvc attributes authorization filter

我正在尝试创建自己的IAuthorizationFilter属性类。基本上,每个api调用都有一个名为'key'的查询字符串参数。然后,我将使用简单的授权属性来装饰任何需要此操作的操作。

我希望我的OnAuthorization(..)方法只提取查询参数的值(如果已提供)。如果是,并且它是合法的,则用户被授权。否则,他们不是。

我不确定如何在OnAuthorization(..)方法中执行此操作。

或者我应该使用IActionFilter代替吗?

编辑:我添加了一些代码来展示我正在做的事情......

public void OnAuthorization(AuthorizationContext filterContext)
{
    if (filterContext == null)
    {
        throw new ArgumentNullException("filterContext");
    }

    ApiKey apiKey = null;
    string queryStringKey = filterContext.HttpContext.Request.QueryString["key"];
    if (!string.IsNullOrEmpty(queryStringKey))
    {
        apiKey = GetApiKey(queryStringKey); // Custom code that checks a dictionary.
    }

    // Do we have a key?
    if (apiKey == null)
    {
        filterContext.Result = new HttpUnauthorizedResult();
    }

    // TODO: Is this key allowed for this domain?

    // All is good, so don't do anything else.
}

1 个答案:

答案 0 :(得分:2)

您应该能够检查传递给OnAuthorization方法的AuthorizationContext参数的HttpContext.Request.QueryString属性。

要根据Key querstring值的值拒绝访问,可以将AuthorizationContext参数的Result属性设置为非null值。如果需要,可以将其设置为HttpUnauthorizedResult类的实例。