How do I dispose of resources after an ASP.NET Web

2019-02-11 00:52发布

问题:

I am attempting to expose an IQueryable<> over ASP.NET Web API and I find that I need to keep the data source open until the request completes, so that the OData query system built into ASP.NET Web API can do its job.

OK, that sounds perfectly reasonable. But where do I dispose of the data source? I do not see any obvious place for this. Should I manage request state in the Application? What is the standard way to do this?

Is the Dispose() method of the controller the appropriate place? I.e. is there a guarantee that one controller instance serves only one request or is that just an implementation detail?

I am using ASP.NET Web API from ASP.NET MVC 4 RC.

回答1:

You can use the extension called RegisterForDispose on the HttpRequestMessage to register any resources that you would like to dispose off when a request is done.

BTW, you might want to look at the following link to regarding IQueryable support in next release of Web API. http://aspnetwebstack.codeplex.com/discussions/359229

[Edited] Doing things in Dispose() method of the Controller would also be a solution. In Web API ApiController based controllers are always per-instance (one controller instance per one request)