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

Asp.net mvc 使用ASP.NET MVC创建API-一个项目中的所有内容,还是两个项目中的所有内容?,asp.net-mvc,api,Asp.net Mvc,Api,所以我录了下来。创建API以访问我们的应用程序的要求。并非所有控制器操作都包含在API中(可能为50%) 我想我可以使用相同的项目,检查每个请求的http头,并根据需要使用xml、JSON或html(与rails非常相似)进行响应 或 创建一个新的ASP.NET MVC应用程序,部署@api.myapp.com并专门用于api访问 我假设我可以为第一个选项编写一个基本控制器来处理99%的工作。第一个选项的问题是,我们不需要(或想要)至少1/2的控制器操作的API功能(可能永远不会) 在第二个选项

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

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

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

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

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

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

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

我想我应该把它放在同一个项目中,但使用不同的路由将其隔离

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

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

您似乎想要创建类似REST服务的东西。请看一看。
是的,我相信你可以把它放在同一个项目中。但最好以某种方式将它们分开(使用MvcContrib中的区域或api和web应用程序的移动控制器将程序集分开,如中所述)。如果控制器复制了大量代码,则可以创建通用控制器,如:

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);
    }
}
公共类控制器base:Controller
服务地点:IService
{
公共服务服务{get;set;}
公共操作结果保存(int id)
{
var item=service.Get(id);
if(TRYUpdate型号(项目))
{
服务。保存(项目);
返回视图(“成功”);
}
返回视图(“错误”,项目);
}
}

希望这能有所帮助。

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

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

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

API: http://example.com/api/widget/list
App: http://example.com/widget/list
然后,您可以创建一个执行该操作的私有函数,让面向公众的函数决定以html或JSON/XML呈现