-
Notifications
You must be signed in to change notification settings - Fork 28
Closed
Labels
Description
Describe the Bug
HttpRequestMessage is disposed after the filters are resolved in some situation
Steps to Reproduce
My code: AutofacRequestMessageDisposed.zip
public class ReproTest
{
[Fact]
public async Task RegisterHttpRequestMessageNotDisposeAfterScopeAsync()
{
var config = new HttpConfiguration();
var builder = new ContainerBuilder();
config.RegisterHttpRequestMessage(builder);
var container = builder.Build();
Assert.True(container.IsRegistered<HttpRequestMessage>());
var httpRequestMessage = new HttpRequestMessage
{
Content = new StringContent("")
};
HttpRequestMessageProvider.Current = httpRequestMessage;
var result = HttpRequestMessageProvider.Current;
using(var scope = container.BeginLifetimeScope(MatchingScopeLifetimeTags.RequestLifetimeScopeTag))
{
Assert.Same(result, scope.Resolve<HttpRequestMessage>());
}
_ = await result.Content.ReadAsStringAsync();
}
}Expected Behavior
Autofac.WebAPI not dispose it
Exception with Stack Trace
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Cannot access a disposed object. Object name: 'System.Web.Http.WebHost.HttpControllerHandler+LazyStreamContent'.
</ExceptionMessage>
<ExceptionType>System.ObjectDisposedException</ExceptionType>
<StackTrace>
at System.Net.Http.HttpContent.CheckDisposed() at System.Net.Http.HttpContent.ReadAsStringAsync() at AutofacRequestMessageDisposed.Filters.SomeDependency.<DoSomething>d__2.MoveNext() in C:\Users\RAD17\source\repos\AutofacRequestMessageDisposed\AutofacRequestMessageDisposed\Filters\CheckRequestFilter.cs:line 33 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at AutofacRequestMessageDisposed.Filters.CheckRequestFilter.<ExecuteAuthorizationFilterAsync>d__2.MoveNext() in C:\Users\RAD17\source\repos\AutofacRequestMessageDisposed\AutofacRequestMessageDisposed\Filters\CheckRequestFilter.cs:line 18 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()
</StackTrace>
</Error>
Dependency Versions
Autofac: 6.0.0/5.2.0
Autofac.WebAPI: 6.0.0/5.0.0