Вызов ActionResult из контроллера отличается от вызова из View, они мне нужны тоже самое - PullRequest
0 голосов
/ 17 марта 2019

У меня есть контроллер, который обрабатывает процесс оплаты, когда я вызываю его из представления, как показано ниже:

<input type="button" value="Create" onclick="location.href='@Url.Action("Pay", "Payment")'" />

Он работает нормально и перенаправляет меня на PayPal Gateway.

Но он не работает, когда я вызываю тот же метод для определенного события из другого контроллера, как показано ниже:

 PaymentController payment = new PaymentController();
 payment.PaymentWithPaypal(obj.Amount);

Вот фрагмент кода из контроллера платежей:

    [System.Web.Http.HttpPost]
    public ActionResult PaymentWithPaypal(string amount)
    {

        //getting the apiContext  
       APIContext apiContext = PaypalConfiguration.GetAPIContext();
        try
        {

            string payerId = Request.Params["PayerID"];
            if (string.IsNullOrEmpty(payerId))
            {...}
        }
     }

Я получил эту ошибку:

{"Ссылка на объект не установлена ​​на экземпляр объекта."} System.Exception {System.NullReferenceException}

похожечто «Запрос» является нулевым, и он не имеет HttpContext!

Хорошо, мне нужно, чтобы имитировать точное поведение вызова ActionResult из представления.

Большое спасибо,

1 Ответ

1 голос
/ 17 марта 2019

Что бы вы ожидали, кроме технических проблем?Вы не можете перенаправить на другую страницу в середине вызова контроллера .

Если вы хотите перенаправить на действие как конец вызова контроллера, используйте RedirectToAction:

return RedirectToAction("PaymentController", "PaymentWithPaypal", new { PayerID = playerId, Amount = "$1.234" });

Вы могли бы также вызывать метод контроллера напрямую, если вы убедились, что вы не трогаете все закулисные логики http.Почему PayerID не является параметром метода?Если вы сделаете это параметром метода, вам будет гораздо проще писать автоматизированные тесты.

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