簡體   English   中英

直接從另一個Web API控制器內部調用另一個Web API控制器

[英]Calling another Web API controller directly from inside another Web API controller

給定控制器ProxyGetInformation的動作。 我希望能夠調用Users控制器的方法GetInformation 兩個WebAPI控制器都在同一個項目中,但直接調用如

var controller = new UsersController();
return controller.GetInformation(request);

不行。

簽名是:

public HttpResponseMessage GetInformation(InformationRequest request)

我不想做完整的重定向響應,因為我不希望外部公開UserController路由。 這需要是內部唯一的呼叫。

對於那些想要在不同控制器中將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調整。

您應該在UsersController中執行類似的操作

public HttpResponseMessage GetInformation(InformationRequest request)
{
    HttpResponseMessage resp ;

    resp = UserBusinessLogic.GetInformation(request) ;

    return resp ;
}

從您的ProxyController,您可以重新使用“UserBusinessLogic”方法,以使用相同的代碼片段獲取相同的信息。

另一種方式可以是:

IQueryable<Users> GetInformation()

不使用IHttpActionResult返回類型。 您的方法仍將是一個Http GET方法,然后以與調用任何類方法相同的方式調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM