【问题标题】:Call MVC Controller Method from web API从 Web API 调用 MVC 控制器方法
【发布时间】:2017-12-11 12:13:25
【问题描述】:

您好,我正在尝试从 webAPI 更新我的应用程序的客户端。因此,当有人调用 web api 时,这会调用将数据推送到控制器或 javascript 以向查看视图的用户显示数据的方法。

我尝试调用方法,甚至尝试调用 POST 到控制器,但它从未到达控制器方法。我在控制器中有这样的简单方法:

[HttpPost]
public ActionResult Refresh(string id)
{
    if (User.Identity.Name == id) return RedirectToAction("Index");
    else return null;
}

我不知道是否可以像这样刷新客户端,我认为我将实现一些 JS 会更好。但我没有在任何地方找到答案。每个人都从 Controller 调用 webApi,但不是相反。我怎样才能做到这一点?

【问题讨论】:

  • 问题是为什么?
  • 你如何调用 web api ?使用 ajax

标签: c# asp.net-mvc asp.net-web-api


【解决方案1】:

每个人都从 mvc 控制器调用 api 是有原因的。

API 的目的是提供数据或对任何具有请求此类操作的必要权限的对象进行一些数据操作。就是这样。

API 不关心它是由 MVC 应用程序、移动应用程序、JAVA 应用程序还是 JavaScript 前端调用,或者谁知道还有什么。

当然,无论出于何种原因,从您的主 api 调用另一个 api 都是完全可以的。

现在,您必须有一个很好的理由为什么要从 WebApi 调用 MVC 控制器,这基本上与任何正常范例相反。

假设您有正当理由。 MVC 动作(控制器方法)可以返回视图或数据,就像普通的 api 一样。例如,您可以返回视图,也可以返回 Json 数据。事实上,MVC 动作的行为类似于 WebApi 端点,这意味着它们可以以相同的方式被调用。你只需要确保你的 URL 是正确的,这样 WebApi 就会通过它的正确限定的路由调用你的 MVC 控制器。

要对此进行测试,请编写一个简单的 MVC 操作,该操作返回一些 Json 数据并在浏览器中调用它。如果您设法正确地制作 URL,您将看到浏览器中显示的数据。现在使用相同的 URL 并使用完整的 URL 从 WebApi 控制器发出类似的请求,就像您在浏览器中所做的那样。

假设你在 MVC 中有这样的东西:

public JsonResult DemoCall(int number)
{
     return Json($"{number}", JsonRequestBehavior.AllowGet);
}

这基本上模仿了一个 get web api 调用,我把这个方法放在 HomeController 中。你可以运行网站,假设它运行在 55712 端口,然后你可以在浏览器中使用类似这样的东西来查看结果:

http://localhost:55712/home/democall?number=3

您现在要做的就是从您的 Web api 发出一个获取请求(例如使用 HttpClient)到这个 url,然后您将获取数据。然后你可以决定你想用它做什么。这同样适用于 POST 方法。

当然,真正的大问题是您为什么需要从 WebApi 调用 MVC 操作,但如果您真的需要这样做,那么它非常简单。像对待任何其他 api 一样对待它。

【讨论】:

  • 谢谢你,即使我尝试这样做我错过了检查响应并且响应是登录页面,因为控制器需要授权,所以我需要在方法上方添加 [AllowAnonymous] 来调用该方法。或者有没有其他解决方案可以将cookie添加到请求中?
【解决方案2】:

它需要定义路由,而参数中的动作将被识别。

例如:[Route("api/refresh/{id}")]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多