![](/img/trans.png)
[英]How to add custom header and bearer token for HttpRequest in Mock Test for Azure Function
[英]How do I mock the HttpRequest on an "azure function"
我有一個 function 和一個 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。然后我使用這段代碼反序列化這個 json 填充在 mockRequest 的正文中
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 中引號的 escaping eg Original Json = {"x": "somexvalue"}
the value coming back = {\"x\": \"somexvalue\"
在你說這只是 visual studio 調試檢查器之前,它不是。 我檢查過。 似乎StreamWriter
正在這樣做,或者StreamReader
正在這樣做。
顯而易見的解決方案是將 \ 從生成的 json 中去掉,但這感覺很不對,而且工作范圍很廣。 有沒有辦法解決這個問題而不必更改我的 function.
所以,問題出在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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.