Я пытаюсь создать пользовательский AuthorizeAttribute, таким образом, в моем Базовом проекте (библиотека классов) у меня есть этот код:
using System;
using System.Web;
using System.Web.Mvc;
using IVC.Core.Web;
using System.Linq;
namespace IVC.Core.Attributes
{
public class TimeShareAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if(!httpContext.Request.IsAuthenticated)
return false;
var rolesProvider = System.Web.Security.Roles.Providers["TimeShareRoleProvider"];
string[] roles = rolesProvider.GetRolesForUser(httpContext.User.Identity.Name);
if(roles.Contains(Website.Roles.RegisteredClient, StringComparer.OrdinalIgnoreCase))
{
return true;
}
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/TimeShare/Account/LogOn");
base.HandleUnauthorizedRequest(filterContext);
}
}
}
Когда я пытаюсь создать вещь, я получаю эту ошибку: Ошибка 2 'IVC.Core. Атрибуты. TimeShareAuthorizeAttribute. AuthorizeCore (Система. Сеть. HttpContextBase)': никакой подходящий метод, который, как находят, переопределял...
Я пропускаю что-то здесь? Я искал на всем протяжении, но каждый сайт, который я могу найти просто, говорит мне делать точно, что я сделал здесь. Я использую mvc2 btw.
Да, я тоже какое-то время возился с этим и понял это из обозревателя объектов. Это, конечно, НЕ ясно из документов MSDN, если вы не прокрутите полностью до комментариев пользователя в классе HttpContextBase. И, конечно же, множество примеров в сети, но никто никогда не показывает полный файл класса! :)
Попробуйте добавить ссылку на System.Web.Abstractions в свой проект.
ОБНОВЛЕНИЕ: только что заметили из MSDN, что в версии 3.5 он находится в разделе System.Web.Abstractions, а в версии 4 - в разделе System.Web.