PayPal提供了如何接收購買通知的示例代碼(或類似的)。遺憾的是,我沒有看到手動測驗的方法,我很難看到如何復制Microsoft.AspNetCore.Http HttpRequest
https://github.com/paypal/ipn-code-samples/tree/master/C#
代碼的相關部分是
[]
public IActionResult Receive()
{
IPNContext ipnContext = new IPNContext()
{
IPNRequest = Request //IPNRequest is HttpRequest。
};
using (var reader = new StreamReader(ipnContext.IPNRequest.Body, Encoding.ASCII)
{
ipnContext.RequestBody = await reader.ReadToEndAsync()。
}
//為這個例子洗掉了其他代碼。
}
我想做的是復制request,這樣我就可以從測驗中執行這個內容了! 通常情況下,我會重構代碼,以便我可以傳遞引數來解決這個問題(即使我傳遞了渲染的字串)。
在這個例子中,我想假裝我不能接觸源代碼,但仍然需要測驗它。這樣我就可以學到更多的東西。
由于我所關注的是stream,正如在ipnContext.IPNRequest.Body中所看到的那樣,我被難住了。如果它是一個流,我不能把它指定為一個字串,但是當它執行ReadToEndAsync時,就會出現一個字串!
我如何創建一個字串?
我如何創建Request物件,其形狀與PayPal期望的Request.IPNRequest.Body
uj5u.com熱心網友回復:
根據需要排列一個流,并通過HttpContext.Request
[TestMethod]
public Task Should_Receive() {
/Arrange
var data = "My paypal expected string here"/span>;
var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(data))。
HttpContext httpContext = new DefaultHttpContext()。
httpContext.Request.Body = stream; //<-- 在這里設定請求BODY。
httpContext.Request.ContentLength = stream.Length。
var controller = new IPNController {
ControllerContext = new ControllerContext() {
HttpContext = httpContext。
}
};
/Act
IActionResult result = await controller.Receive();
//Assert await 控制器.Receive()
//assert as needed。
}
與你原來的例子相鏈接的示例代碼與外部依賴關系緊密相連,可能有其他問題,超出了最初詢問的范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318668.html
標籤:
上一篇:是否有適合測驗的WindowsActiveDirectory容器?
下一篇:賽普拉斯測驗在iframe處掛起
