2 回答

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個贊
在倉庫中進(jìn)行一些挖掘并查看了他們的一些測試之后,我想到了這個想法,以利用受控上下文的響應(yīng)功能。
這意味著需要找到一種方法來捕獲傳遞給的回調(diào)OnStarting。決定嘗試通過虛擬響應(yīng)功能來獲取它。
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);
}
}
在測試中,我將在上設(shè)置功能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()
}
在中間件中等待請求委托時,讓請求委托調(diào)用來捕獲該回調(diào)
- 2 回答
- 0 關(guān)注
- 360 瀏覽
添加回答
舉報