asp.net MVC控制器类可以同时返回Action Method和Json吗?

时间:2019-03-27 04:25:02

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

感谢您的时间,我有一个简单的问题,在asp.net MVC应用程序中,控制器内部是否可能与一些返回View(ActionMethods)的方法一起充当(或返回)Json作为Web API (可以从外部应用调用)。

只是试图做一个适当的分离,所以试图理解。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使动作函数像API。尝试这样的事情。

// Controller/Action
[HttpGet]
public ActionResult IAmSpecial()
{
    if (Request.IsAjaxRequest())
    {
        string[] objects = new string[] { "Foo", "Bar" };

        return Json(objects);
    }

    return View();
}

如果您浏览到IAmSpecial,这将返回{domain}/{Controller}/IAmSpecial视图,而如果您在同一URL上使用AJAX Http Get请求,它将返回JSON结果。

答案 1 :(得分:0)

虽然可以使用仅返回Json数据的控制器方法,但是要在UI应用程序外部公开该数据时有许多注意事项。

由于您拥有MVC应用程序,因此我希望您拥有用户和登录方式。您的控制器很可能会以某种方式受到保护,这对于应用程序的内部用户是有效的。现在,您想添加一种有效地成为API的方法,该方法可在应用程序外部使用,并且对其调用必须以某种方式进行身份验证。

我建议将其拆分。您可以在同一解决方案中创建一个单独的项目,即WebAPI。准备数据的代码可以存在于类库中,然后可以在MVC和WebAPI项目中引用。

您的MVC应用程序可以调用它,然后返回包含该数据的视图,WebAPI调用它并仅返回数据。现在,您可以决定使用API​​来保护自己的API的方法,可以使用Identity Server或其他方法,并且可以在不影响UI层的情况下继续对其进行添加。

您的第二个选择是使MVC应用程序在需要检索数据时使用API​​,因此您的公共客户端和UI都使用相同的东西。

无论使用哪种选项,其想法都是不重复任何内容,同时提供所需的安全层。