Ответ, заключенный в HttpResponseException
, будет утилизироваться средой asp.net, как и любой другой ответ, возвращаемый вами в результате действия.Вы можете легко проверить это самостоятельно, создав фиктивное ответное сообщение:
class DummyResponse : HttpResponseMessage {
public DummyResponse(HttpStatusCode statusCode) : base(statusCode) {
}
protected override void Dispose(bool disposing) {
Console.WriteLine("dispose called");
base.Dispose(disposing);
}
}
Затем бросьте HttpResponseException
с этим ответом и установите точку останова в переопределении Dispose
.Вы заметите, что вызывается Dispose
, и если вы посмотрите на стек вызовов, вы увидите, что HttpControllerHandler
отвечает за это (в контроллере веб-API asp.net).
Обратите внимание, что это исключениеперехватывается ApiControllerActionInvoker
, классом, ответственным за вызов действий вашего контроллера API.Затем он просто захватывает yourException.Response
и проталкивает его вперед по конвейеру, поэтому создание этого исключения ничем не отличается от простого возврата соответствующего ответа от действия вашего контроллера API.Должно быть ясно, я думаю, что структура будет распоряжаться всеми этими ответами, когда это будет сделано с ними.В противном случае это был бы довольно плохой дизайн.
Так что, не загромождайте свой код этими RegisterForDispose
и позвольте фреймворку справиться с этим за вас.