Как настроить 2 действия с одинаковым именем, 1 авторизован и 1 не авторизован? - PullRequest
3 голосов
/ 01 декабря 2008

Возможно ли иметь что-то подобное в ASP.NET MVC ...

[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public string AddData(string Issues, string LabelGUID)
{
    return "Authorized";
}

[AcceptVerbs(HttpVerbs.Get)]
public string AddData()
{
    return "Not Authorized";
}

Таким образом, если пользователь не вошел в систему, по умолчанию используется неавторизованное действие.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2008

Да, это возможно. Вам нужно будет создать свой собственный ControllerActionInvoker и переопределить член FindActionMethod. Я позволил бы базовому классу выполнить свою работу, а затем проверил, удовлетворяет ли возвращаемый метод вашим критериям, а если нет, вернет лучшее соответствие.

Я делаю что-то вроде этого, чтобы мои контроллеры имели «Действие по умолчанию», и оно работает хорошо. Посмотрите MvcContrib и их реализацию в ActionInvoker для действительно хорошего примера.

1 голос
/ 01 декабря 2008

Я не верю в это. Будет выбрано действие контроллера с наилучшим соответствием параметров, а затем будут применены атрибуты.

Вы можете использовать

if (Request.IsAuthenticated)
{  
    return "Authorized";
}
else
{  
    return "Not Authorized";
}

Под капотом [Authorize], по сути, делает то же самое

protected virtual bool AuthorizeCore(IPrincipal user)
{
    if (user == null)
    {
        throw new ArgumentNullException("user");
    }

    if (!user.Identity.IsAuthenticated)
    {
        return false;
    }

    ...snip...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...