Web api访问控制器方法来自另一种控制器方法

时间:2015-06-01 08:38:03

标签: c# asp.net-web-api

我有两个不同的控制器 - >控制器A,控制器B

我有不同的方法每个控制器及其返回值IHttpActionResult (Method A controller A ,Method B and Controller B)

如何访问其他控制器方法并从其他控制器获取其内容

控制器B和内部方法B

IHttpActionResult result = ControllerA.MethodA()

我想读取控制器B中的result.content

4 个答案:

答案 0 :(得分:7)

当请求到来时,只有应该处理请求的控制器自动实例化。您可以手动实例化第二个控制器,但我建议将MethodA功能移动到基本控制器类

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();
       //..
   }
}

或将公共逻辑移动到单独的类(例如服务),这样您就可以从两个控制器中调用它。

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 :(得分:5)

我会考虑为两个控制器使用一个公共基类(如果你想在两者上使用一个方法)

例如

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
    }
}

答案 2 :(得分:1)

1)您可以使用静态类和静态方法将其共享给另一个控制器

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

现在您可以在任何控制器中使用它

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

2)另一种方法是创建一个控制器类的实例并调用实例方法:

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

答案 3 :(得分:0)

AController aController = new AController();
var getResponse = aController.YourMethod(values);

如果您的方法返回Json,则可以使用

轻松解决它
JavaScriptSerializer().Deserialize