تحتاج الى بعض المساعدة / المشورة مع العرف الدرجة ASP.NET MVC IAuthorizationFilter
-
06-07-2019 - |
سؤال
وأنا أحاول أن أجعل الخاصة الطبقة السمة 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.