Taf*_*rwa 5 c# json mocking asp.net-core azure-functions
我有一个带有 Http 触发器的函数
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function,"post", Route = null)] HttpRequest req)
Run Code Online (Sandbox Code Playgroud)
我想模拟这个要求。我已经设法做到了,就像这样
private static Mock<HttpRequest> CreateMockRequest(object body)
{
using var memoryStream= new MemoryStream();
using var writer = new StreamWriter(memoryStream);
var json = JsonConvert.SerializeObject(body);
writer .Write(json);
writer .Flush();
memoryStream.Position = 0;
var mockRequest = new Mock<HttpRequest>();
mockRequest.Setup(x => x.Body).Returns(memoryStream);
mockRequest.Setup(x => x.ContentType).Returns("application/json");
return mockRequest;
}
Run Code Online (Sandbox Code Playgroud)
body,上面代码中只是一些json。然后我使用这段代码来反序列化填充在mockRequest主体中的json
public static async Task<HttpResponseBody<T>> GetBodyAsync<T>(this HttpRequest req)
using var stream = new StreamReader(req.Body);
var bodyString = await stream.ReadToEndAsync();
...
}
Run Code Online (Sandbox Code Playgroud)
bodyString 在这里不是有效的 json,因为 json 中的引号似乎被转义,例如原始 Json ={"x": "somexvalue"}
返回的值 ={\"x\": \"somexvalue\"
在你说这只是 Visual Studio 调试检查器之前,它不是。我检查过。似乎正在StreamWriter这样做或正在这样StreamReader做。
显而易见的解决方案是从生成的 json 中删除 \ ,但这感觉很错误并且无法正常工作。有没有办法解决这个问题而不必改变我的功能。
所以,问题出在StreamWritter. 解决方法就是不使用StreamWritter. @ColinM 是对的。这是嘲笑身体的方式
var json = JsonConvert.SerializeObject(body);
var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
var context = new DefaultHttpContext();
var request = context.Request;
request.Body = memoryStream;
request.ContentType = "application/json";
return request;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6120 次 |
| 最近记录: |