gpt4 book ai didi

c# - 如何在 "azure function"上模拟 HttpRequest

转载 作者:行者123 更新时间:2023-12-05 04:56:39 24 4
gpt4 key购买 nike

我有一个带有 Http 触发器的函数

public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function,"post", Route = null)] HttpRequest req)

我想模拟请求。我已经设法像这样做到了

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;
}

正文,在上面的代码中只是一些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();
...
}

这里的 bodyString 不是有效的 json,因为 json 中的引号似乎被转义了,例如原始 Json = {"x": "somexvalue"}返回值 = {\"x\":\"somexvalue\"

之前你说这只是 visual studio 调试检查器,它不是。我检查过。似乎 StreamWriter 正在执行此操作,或者 StreamReader 正在执行此操作。

最明显的解决方案是从生成的 json 中删除\,但这感觉很不对,而且工作不方便。有没有办法在不更改我的功能的情况下解决这个问题。

最佳答案

因此,问题出在 StreamWritter 上。解决方法就是不使用 StreamWritter。 @ColinM 在正确的线上。这是 mock body 的方式

    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;

关于c# - 如何在 "azure function"上模拟 HttpRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64808877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com