如何最好地在两个 ASP.NET Core 服务器应用程序之间进行通信? [关闭]
Posted
技术标签:
【中文标题】如何最好地在两个 ASP.NET Core 服务器应用程序之间进行通信? [关闭]【英文标题】:How best to communicate between two ASP.NET Core server apps? [closed] 【发布时间】:2017-05-17 22:31:35 【问题描述】:我有两个 ASP.NET Core Web 应用程序(在不同的物理服务器上),并且都使用 EF Core。虽然两者都是“服务器”,但其中一个也从另一个收集数据(即其中一个也是“客户端”)。
ASP.NET Core 不同,因为没有“MVC”和“WebAPI”,它结合了两者。我不确定要使用哪些新 API。
我应该如何将数据从一个传输到另一个?
我最初的想法是“客户端”应用程序有一个经过身份验证和授权的 GET 操作来返回数据。但是怎么做?它可以直接返回一个 EF 实体,还是我负责与 JSON 的序列化?它应该返回IActionResult
还是其他?它应该是常规请求还是 AJAX 请求? OWIN 是否与此有关?
现在 ASP.NET Core 是否有任何智能技术可用?我不需要解决方案,只需要一些正确方向的指针。
【问题讨论】:
从客户端的角度来看,服务器是“Core”还是“Web API”或者其他任何技术都没有区别。无论幕后使用什么框架,由此产生的外部行为都是相同的。我想你会有返回数据的操作(可能是 JSON 格式,尽管你可以使用任何你想要的格式),就像你在以前版本的 Web API 中一样。 @David 当然,但 Core 是新的和闪亮的,我怀疑可能有一些很酷的东西可以让这一切变得简单。例如,它允许从动作中返回各种数据,这是以前无法做到的。基本上,我不想重新发明***。 在以前的 Web API 版本中,如果您想“返回一个 EF 实体”,那么您只需return
该方法中的那个对象。我不明白它怎么会变得比这更简单。在 C# 中,当你想从一个方法返回某些东西时,你 return
它。不管它有多新,该框架仍然使用 C#。也许您可以通过一个示例来说明您要简化的内容?
@David 我不知道你可以简单地返回一个实体。我在the asp.net core docs site 上找不到任何提及。是否自动序列化为 JSON?
这看起来适用:docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting 有多种选择,具体取决于您需要对响应进行多少控制。返回任何对象时,带有200 OK
响应代码的 JSON 格式的响应正文通常是默认值。但是您可以通过使用特定的框架结果类型和辅助方法来更好地控制 HTTP 响应。 (如Ok()
或Json()
)
【参考方案1】:
虽然框架可能有新的辅助方法/对象/等。在这里或那里,客户端和服务器之间的 HTTP 通信并没有真正改变。事实上,从客户端的角度来看,无论后台使用什么技术,服务器都没有区别。
能不能直接返回一个EF实体
确实可以,就像过去的 Web API 一样。一些简单的事情:
public Widget Get(int id)
return _widgetRepository.Get(id);
(假设这里实现了某种存储库,但你明白了。)
对此的默认 HTTP 响应通常是 JSON 格式的响应正文和 200 OK
响应代码。您可以使用各种框架助手对其进行更多控制,其中有几个不错的概述和介绍here。
无论您如何从服务器返回任何给定的结果,客户端仍然会像其他任何方式一样获得 HTTP 响应。代码、标题、内容等
【讨论】:
以上是关于如何最好地在两个 ASP.NET Core 服务器应用程序之间进行通信? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
同一解决方案中两个 ASP.NET Core 项目之间的通信
ASP.NET Core Web API中Startup的使用技巧