当我从View调用它时,我有一个处理付款过程的控制器,如下所示:
<input type="button" value="Create" onclick="location.href='@Url.Action("Pay", "Payment")'" />
它工作正常,并将我重定向到PayPal网关。
但是当我从如下所示的另一个控制器的某个事件上调用相同的方法时,它不起作用:
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}
似乎“请求”为null,并且没有HttpContext!
好的,我需要模拟从视图调用ActionResult的确切行为。
非常感谢,
答案 0 :(得分:1)
除了技术问题之外,您还希望发生什么?您不能在控制器调用中间重定向到其他页面 。
如果要在控制器调用结束时重定向到操作,请使用RedirectToAction
:
return RedirectToAction("PaymentController", "PaymentWithPaypal", new { PayerID = playerId, Amount = "$1.234" });
如果您确保不触摸所有幕后的http逻辑,则可以也直接调用controller方法。为什么PayerID
不是方法参数?如果将其设为方法参数,那么编写自动化测试也将更加容易。