2 回答
TA贡献1850条经验 获得超11个赞
在仓库中进行一些挖掘并查看了他们的一些测试之后,我想到了这个想法,以利用受控上下文的响应功能。
这意味着需要找到一种方法来捕获传递给的回调OnStarting。决定尝试通过虚拟响应功能来获取它。
private class DummyResponseFeature : IHttpResponseFeature {
public Stream Body { get; set; }
public bool HasStarted { get { return hasStarted; } }
public IHeaderDictionary Headers { get; set; } = new HeaderDictionary();
public string ReasonPhrase { get; set; }
public int StatusCode { get; set; }
public void OnCompleted(Func<object, Task> callback, object state) {
//...No-op
}
public void OnStarting(Func<object, Task> callback, object state) {
this.callback = callback;
this.state = state;
}
bool hasStarted = false;
Func<object, Task> callback;
object state;
public Task InvokeCallBack() {
hasStarted = true;
return callback(state);
}
}
在测试中,我将在上设置功能HttpContext,然后直接测试中间件。
[Fact]
public async Task when_adding_response_headers() {
// ARRANGE
var feature = new DummyResponseFeature();
var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(feature);
RequestDelegate next = async (ctx) => {
await feature.InvokeCallBack();
};
var subject = new ResponseHeadersMiddleware(next);
// ACT
await subject.Invoke(context);
// ASSERT
var response = context.Response;
Assert.True(response.Headers.TryGetValues("X-Some-Header", out var someHeader));
Assert.Equals("Foobar", someHeader.FirstOrDefault()
}
在中间件中等待请求委托时,让请求委托调用来捕获该回调
- 2 回答
- 0 关注
- 330 浏览
添加回答
举报