访问内部API控制器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问内部API控制器相关的知识,希望对你有一定的参考价值。

有没有办法在不使用API​​的URL的情况下从另一个类调用您的应用程序API控制器?

例如,我在“personContoller”中使用此方法

    public async Task<ActionResult> GetPersonRecord(string id)
    {
        Person person;
        var link = "api/entity/Person/" + id + "?format=json";
        string results = await OneIMAction(link);
        person = JsonConvert.DeserializeObject<Person>(results);
        string json = JsonConvert.SerializeObject(person, Formatting.Indented);
        return Content(json, "application/json");
    }

如何在同一个应用程序中的另一个C#类中访问此方法的JSON结果,而无需使用Web请求?那可能吗?

答案

根据单一责任原则(S.O.L.I.D.的第一个原则),“每个模块或类别应对软件提供的单一功能部分负责”。

从API控制器继承的类必须响应Web请求。如果我们希望API控制器可以访问另一个API控制器的某些操作,我们应该创建一个Web请求并调用该URL(不推荐)。如果我们希望通过多种方法调用任务,我们会将其转移到Facade,后者称为类服务。并且想要使用它的API控制器的所有操作都将使用类服务。

public class TestService 
{
    public void Do()
    {
      // ...
    }
}


public class HomeController1 : Controller
{
    public ActionResult Index()
    {
        var service = new TestService();
        service.Do();
        return View();
    }
}


public class HomeController2 : Controller
{
    public ActionResult Index()
    {
        var service = new TestService();
        service.Do();
        return View();
    }
}
另一答案

即使可能,控制器和操作也不是要在代码内部调用。它们被设计为甚至具有http响应,因此如果您要调用该函数,则需要查找这些响应并使用try catch来检查200响应。

如果你想重用代码,你需要在另一个函数中使用你正在使用的代码,并保持控制器和动作只是为了调用函数。我通常在业务逻辑中有这样的东西。

例如,在您的person类或扩展person类的类中,您可以拥有以下内容:

public static Person GetPerson(string id){

}

然后,您可以在控制器和api控制器中调用它。

另一答案

为什么你使用网络请求?如果它是同一个应用程序,你可以将一个控制器调用到另一个控

 public class HomeController : Controller
    {
      public async Task<ActionResult> GetPersonRecord(string id)
        {
            PersonController person =new PersonController();
            var Value =person.PersonDetails()
            Value = JsonConvert.DeserializeObject<Person>(results);
            string json = JsonConvert.SerializeObject(person, Formatting.Indented);
            return Content(json, "application/json");
        }
    }



 public class PersonController : Controller
 { 
     [HTTPPOST]
     public void  PersonDetails ( int PersonID)
     { 
       return XXXX;
     } 
 }

以上是关于访问内部API控制器的主要内容,如果未能解决你的问题,请参考以下文章

从内部控制器和twig访问rest API

如何访问活动内部/从活动中的片段视图组件

从片段内部访问 Toolbar/ActionBar 对象

# Java 常用代码片段

# Java 常用代码片段

基于内部片段的graphql过滤器(gatsbyJS)