2

我正在尝试集成SagePayMvc.dll到一个 ASP.NET Web API 项目中,该项目需要ControllerContext.RequestContext传递才能形成通知 URL。

目前我在实现这一点时遇到了一些困难,我需要ControllerContext.RequestContext从这个 web api 控制器传递:

public class PaymentStartController : ApiController
{
    private PaymentRepository paymentRepository = new PaymentRepository();
    private SagePayHelper sagePayHelper = new SagePayHelper();

    public Order MakePaymentInitial(Payment payment)
    {
        Order order = new Order();

        order = sagePayHelper.MakePayment(payment, context);
        paymentRepository.InsertVendorTXCode(order.VendorTxCode);
        paymentRepository.InsertInitialPaymentDetails(order, payment);
        return order;
    }

}

我试图ControllerContext controllerContext = new ControllerContext()在 SagePayHelper 实例化下方添加一个公共,然后随后添加var context = controllerContext.RequestContext,这个问题内部RequestContext的任何方法都没有被实例化,所以当 SagePayMvc 到达在IUrlResolver接口内完成的构建通知 URL 的点时,会引发错误.

有没有一种ControllerContext.RequestContext模拟的方法,我以前使用过 RhinoMocks 或者恢复到我之前在表单项目中实现 SagePayMvc 的方式会更谨慎(表单项目是一个 MVC 4 应用程序,它序列化并将表单数据发送到网络 API)。

任何建议将不胜感激。

4

1 回答 1

2

ASP.NET Web API 使用与 ASP.NET MVC 完全不同的运行时组件来表示上下文和请求/响应消息。看起来您使用的 API 与 ASP.NET MVC 密切相关,这使得在 ASP.NET Web API 中重用非常困难,除非您初始化 ASP.NET MVC 内容以进行手动映射。我认为只使用 ASP.NET MVC 来调用期望 MVC 上下文的方法会更容易。

于 2013-04-30T14:48:29.473 回答