私は Web Api クラスを次のように実装しました。
public class ControllerCore : ApiController
{
...do some basic things...
}
そして、派生クラスには次のものがあります。
public class LoginController : ControllerCore
{
public HttpResponseMessage Get()
{
// Get login status
}
public HttpResponseMessage Post([FromBody]LoginParams login)
{
// Do actual log in
}
}
これはすべてうまくいきます。しかし、開いているデータベース接続を含むマネージド オブジェクトを作成してクリーンアップできるように、ControllerCore を使い捨てにしたいと考えています。
public class ControllerCore : ApiController, IDisposable
{
protected DataAccess DAL;
private bool isDalDisposed;
public ControllerCore()
: base()
{
DAL = new DataAccess(); // opens a connection that will have to be cleaned up
isDalDisposed = false;
}
public new void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected override void Dispose(bool disposing)
{
if (!isDalDisposed)
{
isDalDisposed = true;
if (disposing)
DAL.Dispose();
}
base.Dispose(disposing);
}
...other code here...
}
問題は、LoginController の「Get」は引き続き機能しますが、「Post」は呼び出されないため、ルートが機能していないように見えることです。唯一の違いは Post に引数があることなので、どうにかして Disposable の変更が JSON から LoginParams オブジェクトへの変換を混乱させているのではないかと考えています。
どんな助けでも大歓迎です!