Questions tagged «asp.net-mvc-web-api»

3
我们应该在同一解决方案中从MVC应用程序调用Web API吗?
我正在MVC中具有移动应用程序的项目中工作,因此很明显,我们必须使用Web API,以便可以在移动应用程序中使用它。 在开始开发网站时创建了API之后,我们感到困惑,并讨论了是使用API​​还是直接访问Business对象。最后,我们让更多有经验的开发人员来使用Web API,而不是直接使用Business对象。 我对此解决方案结构感到困惑。 1)为什么我们应该使用Web API并发出HTTP请求(这很耗时)来获取或放置数据,而不是直接使用相同解决方案中的业务对象。 2)在争论之后,他们说如果客户端要在不同的云服务器上托管API和Web并仅在API上应用扩展,或者他想为访问API和Web使用不同的url(这是合理的)。因此,在那种情况下,我们应该在同一解决方案中从MVC应用程序调用Web API吗? 3)如果我们将API和Web托管在不同的托管上,那么这意味着我们的Web将使用WebClient并在每个导航上都有HTTP调用。这样对吗? 4)如果我们要在不同服务器上同时使用API​​和Web托管的业务对象,则BL中的某些更改将需要更新这两个服务器上的构建。 5)或者我们应该只为API创建一个项目,并且可以添加视图或html页面来开发Web界面,这样我们就可以直接从ajax调用API。 据我所知,#5是最好的解决方案,或者API仅适用于第三方访问。如果我们在同一解决方案中具有DB,EF,数据层和业务层,则我们不应使用API​​进行HTTP调用并直接访问业务对象。(如果我错了,请纠正我)当移动应用程序或桌面或任何人想要访问应用程序时需要API,以便我们可以拥有相同的存储库和数据层。 在我的场景中,我必须创建API,因为我们也拥有移动应用程序,在项目API方面,我们称为业务层(单独的项目),业务层与数据访问层(单独的项目)进行通信。因此,我的问题是,如果我们将API和Web托管在不同的服务器上,那么调用API(这是一个HTTP请求)可能需要更长的时间,而不是在创建项目并且拥有.dll时使用业务层的方法。在API控制器中,我们只是将业务量转换为json格式。 我已经在互联网上进行搜索,但没有得到令人信服的答案。我发现了一个博客http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx,但又讨论了同一点在那个博客中,我的问题是为什么我们需要考虑场景#3? 更新:我们可以有不同的API项目和MVC项目,我们可以使用jvascript从Web调用API或使用MVVM模式。

3
如何支持不同的API版本
我正在编写Rest API,并且想知道如何最好地处理对不同版本的支持。这样,我不是要如何将URI定义为V2或V3,而是要根据需要构造代码: 同时支持多个版本,例如。V1&V2&V3 URI必须同时存在。当说V4来限制任何时候的支持量时,我将退出V1。 避免尽可能多的代码重复 轻松向一个版本添加不间断的更改,而不会影响其他版本 似乎可以采取的方法很少: 使用Git来控制版本,并为不同的版本提供分支(旧版本基本上不需要进行新的开发工作)。这将意味着没有代码重复,因为代码中只有最新版本,但是以前的版本将需要与DB的新版本一起使用,直到淘汰。 复制代码,以便每个版本都在同一应用程序中处理,并且具有完全独立的代码路径,但这将意味着大量重复 在各个版本中重复使用大量代码,但这将使维护变得困难,因为更改一个版本更可能影响先前版本 所有选项似乎都有自己的问题,是否有最佳实践来解决此问题?

2
CQRS是否设计过度?
我仍然记得存储库过去的美好时光。但是随着时间的流逝,存储库变得丑陋。然后,CQRS成为主流。他们很好,呼吸着新鲜空气。但是最近,我又一次又一次地问自己,为什么我不能在Controller的Action方法中保持正确的逻辑(尤其是在Web Api中,Action本身就是某种命令/查询处理程序)。 以前,我对此有一个明确的答案:我这样做是为了进行测试,因为很难使用所有这些不可模仿的单例和整体难看的ASP.NET基础结构来测试Controller。但是时代变了,如今,ASP.NET基础结构类对单元测试的友好程度更高(尤其是在ASP.NET Core中)。 这是一个典型的WebApi调用:添加了命令,并通知SignalR客户端有关此命令: public void AddClient(string clientName) { using (var dataContext = new DataContext()) { var client = new Client() { Name = clientName }; dataContext.Clients.Add(client); dataContext.SaveChanges(); GlobalHost.ConnectionManager.GetHubContext<ClientsHub>().ClientWasAdded(client); } } 我可以轻松地对其进行单元测试/模拟。而且,借助OWIN,我可以设置本地WebApi和SignalR服务器并进行集成测试(顺便说一下,速度非常快)。 最近,我越来越不愿意创建繁琐的命令/查询处理程序,并且我倾向于将代码保留在Web Api操作中。仅当重复逻辑或逻辑很复杂并且我想隔离它时,我才例外。但是我不确定我在这里做的事是否正确。 在典型的现代ASP.NET应用程序中管理逻辑的最合理方法是什么?什么时候将代码移动到Commands和Queries处理程序是合理的?有没有更好的模式? 更新。我发现这篇关于DDD-lite方法的文章。因此,看来我将代码的复杂部分移至命令/查询处理程序的方法可以称为CQRS-lite。

5
带有Web API的纯前端JavaScript与带有Ajax的MVC视图
这更多是关于人们近来对如何拆分Web应用程序的想法的讨论。 我习惯于使用其所有视图和控制器来创建MVC应用程序。通常,我将创建一个完整视图,并在一个完整页面请求中将其传递回浏览器,除非我不想立即填充特定区域,然后使用DOM页面加载事件来调用服务器来加载其他区域使用AJAX。 同样,当涉及部分页面刷新时,我将调用MVC操作方法,该方法将返回HTML片段,然后可以使用该HTML片段填充页面的某些部分。这将用于那些我不想减慢初始页面加载速度的区域,或者是更适合AJAX调用的区域。一个示例是表分页。如果您想转到下一页,我希望在AJAX调用获得该信息而不是使用整页刷新的情况下使用。但是AJAX调用仍然会返回HTML片段。 我的问题是。我对这个古老的想法是因为我来自.net背景,而不是纯粹的前端背景吗? 与我一起工作的聪明的前端开发人员,宁愿在MVC视图中什么也不做,而宁愿在前端做任何事情。一直到填充页面的Web API调用。因此,他宁愿返回一个标准对象并使用javascript创建页面的所有元素,而不是调用返回HTML的MVC操作方法。 前端开发人员的方式意味着我通常通过MVC模型验证(包括客户端验证)获得的任何好处都将消失。这也意味着我创建视图,使用强类型html模板等获得的任何好处都将消失。 我相信这意味着我需要为前端和后端验证编写相同的验证。javascript还需要有很多方法来创建DOM的所有不同部分。例如,当向表中添加新行时,我通常会使用MVC部分视图创建该行,然后将其作为AJAX调用的一部分返回,然后将其注入表中。通过使用纯前端方式,javascript将为api调用中的行引入一个对象(例如产品),然后从该对象创建一行。创建表行的每个单独的部分。 有问题的网站将在管理,表格,产品搜索等方面有很多不同的领域。我认为不需要以单一页面应用程序方式构建的网站。 大家对此有何想法? 我很想听听前端开发人员和后端开发人员的意见。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.