给定控制器Proxy
和GetInformation
的操作。我希望能够调用GetInformation
控制器的方法Users
。两个WebAPI控制器都在同一个项目中,但直接调用如
var controller = new UsersController();
return controller.GetInformation(request);
不起作用。
签名是:
public HttpResponseMessage GetInformation(InformationRequest request)
我不想做完整的重定向响应,因为我不想让UserController路由暴露在外部。这需要是一个内部唯一的电话。
答案 0 :(得分:5)
对于那些想要在不同控制器中将API解析为API方法的人,我们找到了一个有效的解决方案。最初的尝试很接近,只是遗漏了一些东西。
var controller = new UserAccountController
{
Request = new HttpRequestMessage(HttpMethod.Post, Request.RequestUri.AbsoluteUri.Replace("/current/route", "/route/to_call"))
};
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = new HttpConfiguration();
return controller.GetInformation(request);
在这样做时,它允许构建目标控制器并直接调用所需的方法。这里最大的复杂性是Uri调整。
答案 1 :(得分:1)
您应该在UsersController中执行类似的操作
CREATE TABLE dbo.MedicineDoseConversion (
medicine_name varchar(20) not null,
dose_to_convert_min_units int null,
dose_to_convert_max_units int null,
dosage_multiplier decimal(18,10) not null
)
GO
INSERT dbo.MedicineDoseConversion (medicine_name, dose_to_convert_min_units,
dose_to_convert_max_units, dosage_multiplier)
SELECT 'Codeine', null, null, 0.15 UNION ALL
SELECT 'Fentanyl', null, null, 2.4 UNION ALL
SELECT 'Hydrocodone', null, null, 1 UNION ALL
SELECT 'Hydromorphone', null, null, 4 UNION ALL
SELECT 'Methadone', 1, 20, 4 UNION ALL
SELECT 'Methadone', 21, 40, 8 UNION ALL
SELECT 'Methadone', 41, 60, 10 UNION ALL
SELECT 'Methadone', 60, null, 12 UNION ALL
SELECT 'Morphine', null, null, 1 UNION ALL
SELECT 'Oxycodone', null, null, 1.5 UNION ALL
SELECT 'Oxymorphone', null, null, 3
;
GO
从您的ProxyController中,您可以重新使用" UserBusinessLogic"使用相同代码段获取相同信息的方法。
答案 2 :(得分:0)
另一种方式可以是:
IQueryable<Users> GetInformation()
不使用IHttpActionResult返回类型。你的方法仍然是一个Http GET方法,然后调用它就像你调用任何类方法一样。