Bil*_*han 6 c# asp.net-web-api
我有两个不同的控制器 - >控制器A,控制器B.
我有不同的方法每个控制器及其返回值 IHttpActionResult (Method A controller A ,Method B and Controller B)
如何访问另一个控制器方法并从另一个控制器获取其内容
控制器B和内部方法B.
IHttpActionResult result = ControllerA.MethodA()
Run Code Online (Sandbox Code Playgroud)
我想在控制器B中读取result.content
请求到来时,只有应该处理请求的控制器自动实例化.您可以手动实例化第二个控制器,但我建议将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();
//..
}
}
Run Code Online (Sandbox Code Playgroud)
或者将公共逻辑移动到单独的类(例如服务),这样您就可以从两个控制器中调用它.
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()
}
}
Run Code Online (Sandbox Code Playgroud)
我会考虑为两个控制器使用一个公共基类(如果你想在两者上使用一个方法)
例如
public abstract class MyBaseController
{
public void CommonMethod()
{
// Do something here
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用它们
public class ControllerA : MyBaseController
{
public void MethodA()
{
base.CommonMethod();
// Do something else
}
}
public class ControllerB : MyBaseController
{
public void MethodB()
{
base.CommonMethod();
// Do Something else
}
}
Run Code Online (Sandbox Code Playgroud)