Разрешить доступ к действию, только если перенаправлены от конкретного действия - PullRequest
6 голосов
/ 05 октября 2010

Есть ли хороший способ ограничить доступ к действию, поэтому вы можете получить к нему доступ, только если вы были перенаправлены с другого действия. Например:

    [HttpPost]
    public virtual ActionResult Create(MyViewModel vm)
    {            
        if (ModelState.IsValid)
        {
            // do some work

            return RedirectToAction("CreateSuccess");
        }
        else
        {
            return View(vm);
        }
    }


    public virtual ActionResult CreateSuccess()
    {
        // only allow execution if you were redirected from Action "Create" 
    }

Ответы [ 4 ]

7 голосов
/ 05 октября 2010

Самый простой способ - сохранить флаг в TempData в первом методе и проверить, существует ли флаг в методе, на который перенаправлен.
TempData существует для передачи информации о состоянии между действиемзапросов и будет действовать только в течение срока действия запроса, поэтому вам не придется беспокоиться о его очистке.

2 голосов
/ 05 октября 2010

Невозможно узнать действие «от», если вы не включите параметры, указывающие на это. Самый простой способ - добавить параметр «SourceAction» или «FromAction» и проверить его в действии «destination».

1 голос
/ 05 октября 2010

Вопрос в том, почему вы хотите это сделать? Может быть, есть лучшее решение для вашей основной проблемы.

В любом случае вы можете использовать свойство HttpContext.Current.Request.UrlReferrer для проверки URL предыдущей страницы.

0 голосов
/ 14 декабря 2010

Первое решение

Вы можете просто сделать это:

[HttpPost]
public virtual ActionResult Create(MyViewModel vm)
{            
    if (ModelState.IsValid)
    {
        // do some work
        return this.CreateSuccess();
    }
    else
    {
        return View(vm);
    }
}

[NonAction]
public virtual ActionResult CreateSuccess()
{
    // do what's needed 
}

Этот последний метод будет выполняться только из других методов действия.Но это не может быть выполнено само по себе.

Второе решение

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

Подробнее о атрибутах селектора настраиваемого действия .

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