0

我目前有一个具有大约 50 个视图的 MVC 3 Web 应用程序。

是否有可能在我的视图旁边提供某种 API,以便一切仍然正常运行?

我的完美世界理念:

服务器正在运行,每个请求都进入它的视图。用户可以在他的 get 请求中决定他是否想要 JSON 格式的原始数据。除了原始数据之外,还将解析 Viewmodel 的结构/名称,以便 Modelbinder 可以做他的事情。

或者另一种方法可能是以某种方式停用我的视图以仅提供可用的 API(再次使用原始数据和结构)。

这是否可能(模型绑定器是一个大问题),甚至可能没有太多的努力/麻烦?

4

2 回答 2

3

如果你不想用 WebAPI 重新做所有的事情,你可以实现一些 ActionFilterAttribute 来改变基于一些查询字符串 fi 的 ActionResult 像这样:

public class ResultSwitcherAttribute: ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request["data"] != null && filterContext.HttpContext.Request["data"] == "json")
        {
            filterContext.Result = new JsonResult
                {
                    Data = (filterContext.Result as ViewResult).Model,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
        }
    }
}

然后,您将在 application_start 或每个控制器/操作中注册它,如下所示:

[ResultSwitcherAttribute]
public class HomeController : Controller
{
    public ActionResult Index()
    {

        return View(new TestModel()
            {
                Web = "http://www.mywebpage.com", Name = "Yngve"
            });
    }
}

当您现在使用 ?data=json 访问您的 url 时,您将获得模型的 JSON 表示,而不是视图。

编辑:代码示例更新

于 2012-08-27T10:32:06.887 回答
0

考虑将ASP.NET Web API添加到您的应用程序。它的实现非常简单,只需添加一个API 控制器,其中包含与您的 REST 操作相对应的方法。我不知道如何将它添加到 MVC 3 应用程序中,但我在这个stackoverflow 问题中有一个 MVC 4 Internet 应用程序的配方。因此,如果您可以升级您的项目以使其具备 Web API 功能,或许可以升级到 MVC 4,我认为这将是一个不错的选择。

要学习 ASP.NET Web API,本教程是一个很好的起点。

于 2012-08-27T10:25:55.940 回答