代码之家  ›  专栏  ›  技术社区  ›  Kyle West

使用ASP.NET MVC创建API-一个项目中的所有内容,还是两个项目中的所有内容?

  •  4
  • Kyle West  · 技术社区  · 17 年前

    所以我录了下来。创建API以访问我们的应用程序的要求。并非所有控制器操作都包含在API中(可能为50%)。

    我假设我可以为第一个选项编写一个基本控制器来处理99%的工作。第一个选项的问题是,我们不需要(或想要)至少1/2的控制器操作的API功能(可能永远不会)。

    在第二个选项中,我有一些控制器的副本,但好消息是大部分/全部?我的控制器操作只有几行代码。通常:

    Whatever whatever = new Whatever(....);
    repository.Save(whatever);
    

    不管怎样,堆栈溢出器会怎么想?

    3 回复  |  直到 17 年前
        1
  •  3
  •   Community Mohan Dere    6 年前

    似乎您想要创建类似REST服务的东西。请看一看 this post of Phil Haack .
    SharpArchitecture . 如果您的控制器复制了大量代码,您可以创建通用控制器,如:

    public class ControllerBase<T, Service> : Controller
    where Service : IService<T>
    {
        public Service service { get; set; }
        public ActionResult Save(int id)
        {
            var item = service.Get(id);
            if (TryUpdateModel<T>(item))
            {
                service.Save(item);
                return View("Success");
            }
            return View("Error", item);
        }
    }
    

        2
  •  0
  •   tvanfosson    17 年前

    我想我会把它放在同一个项目中,但是用不同的路线将它分开。

    API: http://example.com/api/widget/list
    App: http://example.com/widget/list
    

    然后可以尽可能多地重用代码——例如,将数据选择和其他代码推送到BLL中。将其保留在同一个项目中,将使通过AJAX从客户端使用API代码变得更加容易。

        3
  •  0
  •   Sruly    17 年前

    我认为,从长远来看,在两个不同的项目中使用相同的代码会带来麻烦。

    把它全部放在同一个项目中。

    如果您需要在常规请求和API请求之间进行一些分离,您可以使用分离的路由。

    然后,您可以创建一个执行该操作的私有函数,让面向公众的函数决定以html或JSON/XML呈现