【问题标题】:Invoke MVC controller from a class从类中调用 MVC 控制器
【发布时间】:2015-06-30 07:01:51
【问题描述】:

我被要求构建一个 MVC 4 项目,其中控制器方法可以由外部服务调用。

我对这个外部服务的信息非常有限,除了每个服务端点将呈现不同的视图。

我的工作是创建这些视图并手动调用控制器以呈现服务端点要求的视图。

服务和 MVC 项目将构建为单独的项目。 MVC 项目是一个独立的项目。该服务需要返回表单的 HTML,并将其传递给另一个项目。

我不知道如何通过代码隐藏从位于不同解决方案中的项目中调用控制器。任何链接/教程都会很棒。

抱歉,如果我的问题似乎含糊不清或缺乏信息。如果有请告诉我,我会添加更多信息。

【问题讨论】:

  • 只是为了理解...如果外部服务可以调用您的中间层,为什么它不直接调用您的 MVC 控制器操作来执行 Posts?
  • @Freerider 绝对可以 - 我只是认为添加一个中间层会更好。无论如何,我也不知道如何从服务中调用控制器方法。
  • 我不明白你的问题?您希望您的视图直接调用服务或您的操作调用服务
  • 不明白 - “MVC 项目是一个独立项目,不会被托管”。在托管 MVC 项目之前,您将无法对其进行任何使用。
  • 请说明,在外部服务端需要什么格式的响应。是 Json、Xml 还是 Html 格式?以及外部服务将如何使用这些数据,因为只有您才能决定如何设计解决方案

标签: c# asp.net-mvc asp.net-mvc-4 controller


【解决方案1】:

我建议你避开中间层,直接从外部服务调用你的 MVC 控制器或 Web Api。

查询外部资源的简单示例:

public string ListProductsAsync()
{
    var client = new HttpClient();

    var response = client.GetStringAsync("http://youriste/controller/action");

    return response.Result;
}

更高级的解释,下面的链接(Calling a Web API From a .NET Client in ASP.NET Web API 2)会帮助你。

【讨论】:

  • 我的困惑在于控制器方法调用。如何从代码隐藏中做到这一点?
  • @user2905455 调用控制器的方式是执行 GET、POST、PUT 等操作。与从用户界面调用控制器的方式相同,存在从服务器调用控制器到服务器的选项,使用 http 方法 GET,POST,...如我的回答所示,例如使用 GetStringAsync()来自 HttpClient 的方法。如果你以其他方式调用你的动作控制器,那么拥有控制器是没有意义的。
【解决方案2】:

您可以考虑创建API Controllers (WebAPI) 而不是普通的Controller

然后返回视图,如下所示 - https://aspguy.wordpress.com/2013/09/10/web-api-and-returning-a-razor-view/

WebAPI 作为服务公开给客户端,它们可以像使用其他服务一样使用它们。

但是这会是一个 hack,建议使用 WebAPIs 作为 RESTful 服务并只返回 xml 或 json。

现在响应是 HTML 格式的,您可以使用 HttpClient 从调用应用程序调用您的控制器(MVC 或 WebApi)。

几个链接 -

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

async calls using HttpClient on MVC4

【讨论】:

  • 我会看看那个链接,谢谢。快速提问 - 外部服务是否能够调用 APIController 的方法?如果是这样,我可以看看一个例子吗?
  • @user2905455:可以,WebApi 的快速入门教程肯定会有所帮助。见 - asp.net/web-api
猜你喜欢
  • 2012-12-16
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多