Перенаправление на страницу, когда не оплачено - PullRequest
1 голос
/ 25 мая 2009

Я использую MVC с C #. Мне нужно перевести пользователя на страницу оплаты, если пользователь не заплатил за товар. Мне нужен общий класс для проверки этой функциональности и перенаправления на страницу оплаты.

Как наследование всех контроллеров базовому контроллеру. В этом базовом контроллере я должен проверить этот статус платежа для некоторых контроллеров и действий (т.е. ViewPage) и перенаправить на страницу оплаты.

Пожалуйста, кто-нибудь предложит лучший способ сделать это

Ответы [ 3 ]

1 голос
/ 26 мая 2009

Создайте собственный атрибут actionFilterAttribute следующим образом (этот пример работает с сохранением вашего элемента в сеансе, но вы можете изменить его при необходимости):

public abstract class RequiresPaymentAttribute : ActionFilterAttribute
{
    protected bool ItemHasBeenPaidFor(Item item)
    {
        // insert your check here
    }

    private ActionExecutingContext actionContext;

    public override void OnActionExecuting(ActionExecutingContext actionContext)
    {
        this.actionContext = actionContext;

        if (ItemHasBeenPaidFor(GetItemFromSession()))
        {
            // Carry on with the request
            base.OnActionExecuting(actionContext);
        }            
        else
        {
            // Redirect to a payment required action
            actionContext.Result = CreatePaymentRequiredViewResult();
            actionContext.HttpContext.Response.Clear();
        }
    }

    private User GetItemFromSession()
    {
        return (Item)actionContext.HttpContext.Session["ItemSessionKey"];
    }

    private ActionResult CreatePaymentRequiredViewResult()
    {
        return new MyController().RedirectToAction("Required", "Payment");
    }
}

Затем вы можете просто добавить атрибут ко всем действиям контроллера, которые требуют этой проверки:

public class MyController: Controller
{
    public RedirectToRouteResult RedirectToAction(string action, string controller)
    {
        return RedirectToAction(action, controller);
    }

    [RequiresPayment]
    public ActionResult Index()
    {
        // etc
1 голос
/ 25 мая 2009

Я предлагаю вам сделать это с атрибутом действия

0 голосов
/ 25 мая 2009

Создание вашего собственного ActionFilter - лучшее решение. Вы можете скачать исходный код ASP.NET MVC и посмотреть класс System.Web.Mvc.AuthorizeAttribute. Я думаю, что это хорошая отправная точка для вас.

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