感谢您的时间,我有一个简单的问题,在asp.net MVC应用程序中,控制器内部是否可能与一些返回View(ActionMethods)的方法一起充当(或返回)Json作为Web API (可以从外部应用调用)。
只是试图做一个适当的分离,所以试图理解。
非常感谢。
答案 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都使用相同的东西。
无论使用哪种选项,其想法都是不重复任何内容,同时提供所需的安全层。