Использование параметров действия в настраиваемом атрибуте авторизации в ASP.NET MVC3

Некоторые компиляторы дают лучшие сообщения, чем другие. Какой компилятор Вы используете? Однако они все довольно плохи. C++ 0X решит большую часть этой проблемы (см. понятия ), но стандарт не будет выпущен до 2009, и широкая поддержка, вероятно, будет еще позже, чем это:-(

22
задан SoonDead 5 April 2011 в 08:49
поделиться

2 ответа

Пока AuthorizeAttribute наследуется, вы можете получить свой параметр из AuthorizationContext следующим образом:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        string idParam = filterContext.Controller.ValueProvider.GetValue("id").AttemptedValue;
        int id;

        if (int.TryParse(idParam, out id))
        {
            if (id == 8) // apply your business logic here
                return;
        }

        filterContext.Result = new HttpUnauthorizedResult();
    }
}

[MyAuthorize]
public ActionResult Protected(int id)
{
    return View();
}

ValueProvider будет перебирать всех зарегистрированных провайдеров, которые по умолчанию включают в себя RouteDataValueProvider, QueryStringValueProvider и FormValueProvider, и сделайте всю работу за вас.

В противном случае я рекомендую использовать ActionFilterAttribute.

9
ответ дан 29 November 2019 в 04:40
поделиться
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var rd = httpContext.Request.RequestContext.RouteData;
        string currentAction = rd.GetRequiredString("action");
        string actionparam =Convert.ToString(rd.Values["param"]);

        if (id == actionparam)
        {
            return base.AuthorizeCore(httpContext);
        }
return true;
 }
1
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: