Метод управления доступом к веб-api из другого метода controllerа

У меня два разных controllerа -> controller A, controller B

И у меня есть разные методы для каждого controllerа и их возвращаемые значения IHttpActionResult (Method A controller A ,Method B and Controller B)

Как я могу получить доступ к другому методу controllerа и взять его содержимое с другого controllerа

Контроллер B и внутренний метод B

 IHttpActionResult result = ControllerA.MethodA() 

и я хочу прочитать result.content внутри controllerа B

Я бы рассмотрел использование общего базового classа для двух controllerов (если есть метод, который вы хотите использовать для обоих)

например

 public abstract class MyBaseController { public void CommonMethod() { // Do something here } } 

затем используйте их как

 public class ControllerA : MyBaseController { public void MethodA() { base.CommonMethod(); // Do something else } } public class ControllerB : MyBaseController { public void MethodB() { base.CommonMethod(); // Do Something else } } 

Когда запрос приходит, автоматически запускается только controller, который должен обрабатывать запрос. Вы можете создать экземпляр второго controllerа вручную, но я бы рекомендовал переместить функциональность MethodA либо на базовый class controllerа

 public class BaseController : ApiController { // ... public IHttpActionResult MethodA(int id) { var foo = repository.Get(id); if (foo == null) return NotFound(); return Ok(foo); } } public class ControllerA : BaseController { //... } public class ControllerB : BaseController { public IHttpActionResult MethodB(int id) { var result = MethodA(); //.. } } 

или переместить общую логику для разделения classа (например, службы), чтобы вы могли вызвать его с обоих controllerов.

 public class ControllerA : ApiController { private IFooService fooService; public ControllerA(IFooService fooService) { this.fooService = fooService; } public IHttpActionResult MethodA(int id) { // use fooService.Method() } } public class ControllerB : ApiController { private IFooService fooService; public ControllerB(IFooService fooService) { this.fooService = fooService; } public IHttpActionResult MethodB(int id) { // use fooService.Method() } } 

1) Вы можете использовать статический class и статический метод внутри, чтобы поделиться им для других controllerов

 public static class CommonMethods { public static string SomeMethod(string s) { string RetString; ... return (RetString); } } 

Теперь вы можете использовать его в любых controllerах

 string SomeMethodResult = CommonMethods.SomeMethod("Say Hello"); 

2) И еще один способ – создать экземпляр classа controllerа и методов экземпляров вызовов:

 public class V1Controller : ApiController { public void Put(int id, [FromBody]string value) { HomeController hc = new HomeController(); hc.SomeMethod(); } }