Eri*_*lfs 6 asp.net asp.net-web-api
我有一个控制器,它需要调用另一个控制器.我们在客户端上做这项工作.出于性能原因,我们希望执行此服务器端.
请求是POST请求Url =" http://example.com/api/foo/1234567 (非常标准的URL,带有绑定ID)
请求数据
{
something1:'abc',
something2:'def',
copyFromUrl : '/api/bar/7654321'
};
Run Code Online (Sandbox Code Playgroud)
copyFromUrl可以是应用程序中的任何其他控制器.我不想在堆栈中上下一堆if语句来进行绑定.
使问题复杂化的是大多数控制器具有三种不同的GET签名.获取(sting id)获取(sting id,string xpath)Get()
实现此目的的一种方法是基本上短路 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;
}
Run Code Online (Sandbox Code Playgroud)
正如您在这里看到的,前两个操作的参数不同,第三个操作接受 url(如代码示例中所示),允许它调用任何其他操作。
我们基本上在内存中托管一个服务器,应用与真实服务器相同的路由,然后立即查询它。
硬编码localhost实际上并不在运行时使用,路由会忽略它,但我们需要有效的绝对 URL 名称才能通过内部验证。
如果可以的话,此代码只是一个说明和概念验证。
| 归档时间: |
|
| 查看次数: |
9783 次 |
| 最近记录: |