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

时间:2009-02-22 01:04:20

标签: asp.net-mvc api

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

我想我可以使用相同的项目,检查每个请求的http标头,并根据需要使用xml,JSON或html进行响应(很像rails)。

OR

创建一个新的ASP.NET MVC应用程序,部署@ api.myapp.com并专门用于API访问。

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

在第二个选项中,我有一些控制器的副本,但好消息是大多数/全部?我的控制器动作只有几行代码。典型地:

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

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

3 个答案:

答案 0 :(得分: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);
    }
}

希望这有帮助。

答案 1 :(得分:0)

我想我会投入相同的项目,但是使用不同的路线将其隔离。

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

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

答案 2 :(得分:0)

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

全部放在同一个项目中。

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

然后,您可以创建一个执行操作的私有函数,并让面向公众的人决定使用html或JSON / XML进行渲染