2016-09-17 2 views
1

Я знаю решение, как я хочу, в ASP.NET Boilerplate. В этой структуре вы можете объявлять классы, наследовать от пользовательского класса (не наследуемого от ApiController), и когда он запускается, он строит контроллеры и работает как контроллеры.Можно ли использовать класс без наследования от ApiController, использовать его как api-контроллер?

Но я пишу свое приложение с нуля и на самом деле я не знаю, как это работает в Boilerplate (я думаю, что он использует рефакторинг, я нашел классы ControllerBuilder, но это такая большая библиотека, я не думаю, что это хорошая идея переписать тот же код или скопировать его, есть так много зависимостей).

Я знаю, что могу обрабатывать запросы и отвечать с помощью своих методов пользовательских классов, но я думаю, что это будет работать немного медленно и не безопасно.

Возможно, вы знаете простой способ сделать это? Спасибо.

ответ

2

То, о чем вы просите, технически возможно, но ни в коем случае это было бы просто. На самом деле, если вы мертвы, я бы предположил, что вы, возможно, не захотите использовать структуру Web-Api.

Однако, чтобы решить вопрос о возможности, я бы начал с рассмотрения использования HttpRoutingDispatcher в качестве точки расширения. Обзор трубопровода, включая диспетчер, можно найти здесь: http://byterot.blogspot.com/2012/05/aspnet-web-api-series-messagehandler.html

Как только вы придумаете подходящее место для расширения конвейера веб-апитера, вам все равно нужно будет создать компоненты (компоненты), которые каким-то образом «знают», как вызывать неконтроллеры - и вы потеряете большую часть того, что может предложить инфраструктура (разрешение действия, привязка параметров, фильтры действий и т. д.)

0

Используйте контроллер, чтобы визуализировать ваши обычные взгляды. Действие ApiController возвращает только данные, которые сериализуются и отправляются клиенту.

здесь link

процитировать:

Примечание Если вы работали с ASP.NET MVC, то вы уже знакомы с контроллерами. Они работают аналогично в Web API, но контроллеры в Web API получают из класса ApiController вместо Класс контроллера. Первое существенное различие, которое вы заметите, заключается в том, что действия на контроллерах Web API не возвращают представления, они возвращают данные.

+0

Спасибо, но это не то, что я имею в виду. Я не хочу наследовать от каких-либо контроллеров (ApiController или ControllerBase). Я хочу использовать бесплатные классы платформы ASP в качестве контроллеров. –

0

Вам необходимо наследовать от ApiController, потому что он имеет встроенный конвейер/цикл запроса/ответа.