从MVC控制器消费ASP.NET WebApi

7
我开始着手一个新项目,通过WebApi公开客户端功能,以便在多个设备之间重用同一功能,但某些功能在移动设备和托管应用程序之间共享。
我的问题是,虽然我知道如何从设备中使用WebApi,但对于如何从托管api的MVC项目中使用WebApi,我有点困惑,不知道最佳实践是什么,或者只是能够正常工作的东西。
我的第一个想法是根据需要实例化控制器,就像我处理其他类一样,但我有一种隐隐的感觉,认为这种方法虽然可行,但并不好。
另一个想法是使用HttpClient。尽管我一直在努力,但我总是找不到api。
var client = new HttpClient(new HttpServer(GlobalConfiguration.Configuration));
client.PutAsJsonAsync("/api/project/login", Json(model));

10
应用程序为什么需要使用自己外部可访问的API?如果应用程序需要API公开的功能,它不能直接调用这个功能吗?如果你有一个WebAPI方法和一个控制器方法需要做同样的事情,这个“同样的事情”应该被抽象成共享代码中的一个函数或对象,这两个方法都会内部调用它。 - David
即使它们是两个独立的解决方案,您也可以引用其中一个并直接使用组成WebAPI的对象,并对上述内容进行+1。 - Stephen Byrne
你的第二种方法的答案可以在下面找到。 http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client - RasikaSam
嗯,David,我同意你的观点,但我认为这将取决于项目、业务/基础设施要求,在分布式应用程序中,最好使用API将数据库和/或逻辑作为中央“访问点”,这比在许多解决方案中的服务器或设备(如智能手机、平板电脑或Windows应用程序)中具有不同版本的DLL更好。在分布式解决方案中,即使您的某个应用程序驻留在同一台服务器上,也无法在内部处理它,因为需要维护。在这种情况下,我有一个解决方案。但我再次同意你的观点,如果解决方案允许的话。 - Zorkind
1个回答

2
这是一个有点主观的问题,因为没有一个“正确”的答案。基本上,您需要考虑多个方面。
  • 直接依赖解析控制器实例是否安全?
  • 这个逻辑将在其他地方使用吗?
  • 这些确实是两个独立的应用程序关注点吗?
如果API和MVC应用程序有不同的关注点,则应妥善分离它们,并且MVC应用程序应使用HttpClient调用WebAPI应用程序。这可以减少攻击向量并很好地分离应用程序关注点。
如果MVC和WebAPI都公开相同的信息,并且安全性/关注点分离不是问题,则依赖解析控制器应该足够。
如果逻辑不是关注点分离问题,并且将在多个地方使用,则将其拆分为常见组件可能是最佳选择。
总之,这听起来像是一个小型应用程序,可以从立即依赖解析控制器中受益。随着应用程序的增长(或者如果已计划为大型应用程序),将逻辑分离成适当的SOA格式将是有益的。
简而言之 - SO真的无法回答这个问题,除非知道应用程序是什么以及将要做什么。务实一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接