تحتاج الى بعض المساعدة / المشورة مع العرف الدرجة ASP.NET MVC IAuthorizationFilter

StackOverflow https://stackoverflow.com/questions/1414316

سؤال

وأنا أحاول أن أجعل الخاصة الطبقة السمة IAuthorizationFilter. أساسا، كل استدعاء API لديها معلمة سلسلة الاستعلام يسمى <م> 'مفتاح' . كنت ذاهبا ثم لتزيين أي الإجراءات التي تستدعي ذلك، مع السمة إذن بسيطة.

وكنت آمل أن لي طريقة 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.
}
هل كانت مفيدة؟

المحلول

ويجب أن تكون قادرة على تفقد الممتلكات HttpContext.Request.QueryString المعلمة AuthorizationContext تمريرها إلى الأسلوب OnAuthorization.

لمنع الوصول على أساس القيمة قيمة querstring الرئيسية، يمكنك تعيين الخاصية نتيجة المعلمة AuthorizationContext إلى قيمة غير فارغة. ويمكن، إذا أردت، أن يتم تعيين هذا إلى مثيل من فئة HttpUnauthorizedResult.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top