我们能 ASP.NET Core REST API同时支持JSON和SOAP吗?

Can we make ASP.NET Core REST API support both JSON & SOAP?

提问人:Sravani Yadav 提问时间:11/9/2023 最后编辑:Sravani Yadav 更新时间:11/11/2023 访问量:73

问:

我想做一个同时支持json和soap的REST API。我尝试了nuget包,但出现如下错误:SoapCore

IEndpointRoutebuilder 不包含“UseSoapEndpoint 和最佳扩展方法重载”的定义 SoapEndpointExtensions.UseSoapEndpoint <1EmployeeBiz> (IApplicationBuilder、字符串、SoapEncoderOptions、 SoapSerializer、 bool、 ISoapModelBounder、 WediFileOptions、 bool、 bool) 需要类型为“Microsoft.AspNetCore.Builder.IApplicationbuilder”的接收器。

请求到达管道末尾,但未执行终结点:SoapCore。如果使用路由,请使用 IApplicationBuilder.UseEndpoints (...) 注册 EndpointHiddleware。"

我在文件中使用了这段代码:startup.cs

endpoints.UseSoapEndpoint<IEmployeeBiz>("/Service.asmx", new SoapEncoderOptions(), SoapSerializer.XmlSerializer);

你能指导任何其他替代方案来使REST API支持json和soap吗?

更新:

我们将 .Net Core 迁移到 .Net 6,并且我们有多个旧客户向我们的 API 发送 soap 请求。我们不想要求客户在他们最终进行更改,因此我们希望我们的 RestAPI 同时支持 JSON 和 XML 请求和响应。

C# ASP.NET 核心 Web 服务 WCF

评论

0赞 Panagiotis Kanavos 11/9/2023
首先,您使用的是哪个 .NET 版本?这些错误表明存在版本混淆。其次,SOAP 服务不使用扩展名或任何文件扩展名。ASMX 是一个过时的框架,在 2006 年被 WCF 取代,并且从未支持过此后出现的 SOAP 规范和标准。.asmx
0赞 Jeremy Thompson 11/9/2023
REST 和 SOAP 是完全相反的 Web 方法。从本质上讲,一个是无状态的,另一个是用 XML 填充的状态。我想你需要告诉我们这个想法背后的原因......
2赞 Panagiotis Kanavos 11/9/2023
@JeremyThompson SOAP 不是有状态的。状态不是 REST 和 HTTP 或 SOAP API 之间的区别
0赞 Dai 11/10/2023
@PanagiotisKanavos我认为这种感知是因为SOAP与RPC语义密切相关,并且许多基于RPC的系统都是有状态的(...看着你,DCOM)
0赞 Panagiotis Kanavos 11/13/2023
@Dai SOAP 不是 RPC,它主要是基于文档的。Microsoft在2000-2010年的Teched会议上的所有演讲都是关于文档的。甚至我的 COM+(不是 DCOM)服务也始终是无状态的。BUUUUT 不仅为 RPC 创建工具变得非常容易,而且航空公司使用并由 IBM 等大型咨询公司设计的文档优先服务也非常可怕。文档设计者只是没有牢记实现。

答:

0赞 user_4030 11/11/2023 #1

在单个 API 中同时支持 JSON 和 SOAP 可能会增加一些复杂性。考虑应用程序的具体要求,以及是否需要同时支持这两种格式。如果可以的话,为 JSON 和 SOAP 设置单独的端点甚至单独的服务通常更简单。

在 Startup.cs 文件中,为 JSON 和 SOAP 配置服务。

services.AddControllers().AddNewtonsoftJson();
services.AddSoapCore();

配置 API 端点以处理 JSON 和 SOAP 请求。

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.UseSoapEndpoint<YourService>("/YourSoapService.asmx", new BasicHttpBinding());
});

创建 API 控制器以处理 JSON 请求。ASP.NET Core 默认支持 JSON,因此可以使用 ApiController 属性并返回 JSON 响应。

[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        // Your JSON logic here
        return Ok(new { message = "JSON response" });
    }
}