我有两个不同的控制器 - >控制器A,控制器B
我有不同的方法每个控制器及其返回值IHttpActionResult (Method A controller A ,Method B and Controller B)
如何访问其他控制器方法并从其他控制器获取其内容
控制器B和内部方法B
IHttpActionResult result = ControllerA.MethodA()
我想读取控制器B中的result.content
答案 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