使用ASP.NET MVC创建API - 全部在一个项目或两个项目中?


4

所以我recd。需要创建一个API来访问我们的应用程序。并非所有的控制器操作都被API覆盖(可能是50%)。

我想我可以使用相同的项目,检查HTTP标头为每个请求,并根据需要(很像轨)与任何XML,JSON或HTML响应。

OR

创建一个新的ASP.NET MVC应用程序,部署@ api.myapp.com并且仅使用它的API访问。

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

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

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

无论如何,堆栈溢出者会怎么想?

3

看来你想创建类似REST服务的东西。请看看this post of Phil Haack
是的,我相信你可以把它放在同一个项目中。但是,这将是更好的给他们以某种方式分离(使用面积从MvcContrib或移动API和Web应用程序像这样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); 
    } 
} 

希望这有助于。


0

我想我会放在同一个项目,但使用不同的路线隔离它。

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

然后,您可以重用的代码量可能 - 推数据选择和其他代码到您的BLL,例如。将它保留在同一个项目中可以更容易地通过客户端的AJAX使用您的API代码。


0

我认为把相同的代码在2个不同项目的要求,从长远来看麻烦。

把它们都放在同一个项目。

如果您需要在常规与API请求之间进行分离,则可以使用单独路由。

然后,您可以制作一个私人功能,执行该操作,并让公众面对决定使用html或JSON/XML呈现的私人功能