gpt4 book ai didi

asp.net - Controller 调用另一个 Controller C# WebApi

转载 作者:行者123 更新时间:2023-12-02 20:43:08 24 4
gpt4 key购买 nike

我有一个 Controller ,它需要调用另一个 Controller 。我们正在客户端上做这项工作。出于性能原因,我们希望在服务器端进行此操作。

请求是 POST请求 Url = "http://example.com/api/foo/1234567(非常标准的 url,带有 id 绑定(bind))

请求数据

{
something1:'abc',
something2:'def',
copyFromUrl : '/api/bar/7654321'

};

copyFromUrl 可以是应用程序中的任何其他 Controller 。我不想手动在堆栈中上下插入一堆 if 语句来进行绑定(bind)。

使问题变得复杂的是大多数 Controller 具有三种不同的 GET 签名。获取(刺痛ID)获取(字符串 ID,字符串 xpath)获取()

最佳答案

实现此目的的一种方法是基本上短路 HttpServer 和 HttpClient 类。我在这里使用 ASP.NET Web API 2,但希望相同的技术可以用于原始 Web API。

这是简约的工作示例:

public class BarController : ApiController
{

// GET http://localhost/api/bar
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {"Foo Bar", "Progress Bar"};
}

// GET http://localhost/api/bar?bar=Towel Bar
[HttpGet]
public IEnumerable<string> GetCustomBar(string bar)
{
return new string[] {"Foo Bar", "Progress Bar", bar};
}

// POST http://localhost/api/bar?action=/api/bar?bar=Towel Bar
[HttpPost]
public HttpResponseMessage StartAction(string action)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
var server = new HttpServer(config);
var client = new HttpClient(server);
var response = client.GetAsync("http://localhost/" + action).Result;
return response;
}

正如您在此处看到的,前两个操作的参数不同,第三个操作接受 url(如代码示例中所示),允许它调用任何其他操作。

我们基本上在内存中托管一个服务器,应用与真实服务器相同的路由,然后立即查询它。

硬编码的 localhost 实际上在运行时不使用,路由会忽略它,但我们需要有效的绝对 URL 名称才能通过内部验证。

此代码只是一个示例,如果可以的话,可以作为概念验证。

关于asp.net - Controller 调用另一个 Controller C# WebApi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com