C# 如何扩展WebAPI以支持通过HTTP回调返回控制器操作结果?

C# 如何扩展WebAPI以支持通过HTTP回调返回控制器操作结果?,c#,asp.net-mvc,asynchronous,asp.net-web-api,C#,Asp.net Mvc,Asynchronous,Asp.net Web Api,我试图扩展WebAPI以支持通过HTTP回调返回响应 工作流程: WebAPI接收带有回调URL的HTTP请求 WebAPI正常处理URL,如果操作在少于配置超时的时间内完成,则同步发送结果 如果超过超时,服务器需要发送一个HTTP响应,指示它已异步,处理将继续 当处理(最终)完成时,控制器的响应被发布到预先协商的回调url 控制器需要保持同步,并且不知道异步/回调功能 MessageHandler可能是一个候选,但返回多个HTTP响应(一个用于早期的“长任务”响应,一个用于回调)似乎不受支持

我试图扩展WebAPI以支持通过HTTP回调返回响应

工作流程:

  • WebAPI接收带有回调URL的HTTP请求
  • WebAPI正常处理URL,如果操作在少于配置超时的时间内完成,则同步发送结果
  • 如果超过超时,服务器需要发送一个HTTP响应,指示它已异步,处理将继续
  • 当处理(最终)完成时,控制器的响应被发布到预先协商的回调url
  • 控制器需要保持同步,并且不知道异步/回调功能

    MessageHandler可能是一个候选,但返回多个HTTP响应(一个用于早期的“长任务”响应,一个用于回调)似乎不受支持


    有人能提供关于WebAPI的哪些方面是可扩展的以及与此场景相关的指导吗?

    我认为HttpMessageHandler可以做到这一点,但不是我认为您要求的方式

    一个URL将是主URL,将返回结果或重定向,另一个将处理重定向

    这是一种非常常见的情况。在某些情况下,您会要求提供某个内容的列表,并收到一定数量的结果和一个延续URL(如果有更多)。您的需求可能会被视为只有一个延续或整个结果

    将其视为CQR(命令查询责任分离)的另一种方式。您可以向URL上的发送一个命令,并从另一个URL检索响应。作为优化,调用命令的结果可能是响应,而不是查询URL


    这对您有帮助吗?

    此逻辑可能不是此工作的最佳解决方案。我认为您可以将潜在的长/昂贵作业划分为基于队列的流程。并最终使用预定的后台任务管理此队列。因此,通过这种方法,您可以通过“向队列添加新任务”简化api操作: