Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对api的v0请求使用基于DataContract的序列化程序,而对api的v1请求使用默认的json/xml序列化程序?_C#_Asp.net Core Webapi - Fatal编程技术网

C# 如何对api的v0请求使用基于DataContract的序列化程序,而对api的v1请求使用默认的json/xml序列化程序?

C# 如何对api的v0请求使用基于DataContract的序列化程序,而对api的v1请求使用默认的json/xml序列化程序?,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,我正在将基于WCF的api迁移到基于ASP.NET核心WebAPI的api。我还使用Microsoft.AspNetCore.Mvc.Versioningnuget包为基于WebAPI的api提供“开箱即用”的api版本控制 理想情况下,我希望对v0请求主体和响应使用基于DataContract的序列化程序;因此,确保序列化的工作方式与当前在基于WCF的api中的工作方式完全相同。但是,对于v1请求主体和响应,我更喜欢使用更新的内置json/xml序列化程序 通过Startup.cs中的设置并使

我正在将基于WCF的api迁移到基于ASP.NET核心WebAPI的api。我还使用
Microsoft.AspNetCore.Mvc.Versioning
nuget包为基于WebAPI的api提供“开箱即用”的api版本控制

理想情况下,我希望对v0请求主体和响应使用基于DataContract的序列化程序;因此,确保序列化的工作方式与当前在基于WCF的api中的工作方式完全相同。但是,对于v1请求主体和响应,我更喜欢使用更新的内置json/xml序列化程序


通过
Startup.cs
中的设置并使用
FormatFilter
属性,是否有一种简单的方法来实现这一点?

您是否希望v1 web api处理对v0 WCF端点的请求?你的WCF端点URL看起来像什么?我的WCF端点看起来像:
WCF?method=rawr&format=json&apikey=apikey¶ms=params
我的WebAPI端点看起来像:
WebAPI/controller/version/method?format=json&apikey=apikey¶ms=params
我正在使用
Microsoft.AspNetCore.Rewrite
nuget在WebAPI上将WCF端点URL重写为v0 WebAPI端点。我不希望维护WCF端点url格式和v1 WebAPI端点之间的链接。v1webapi将破坏更改,因此需要更新客户端以处理新的请求/响应;他们也可以切换到新的baseurl。我建议您的重写器执行类似于www.mysite.com/api/v1/controller/version/method?format=json&apikey=apikey¶ms=params的操作,以支持传统的WCF客户端,并引入新的RESTful v2来支持新客户端和添加'l api,那么www.mysite.com/api/v2/controller/action/etc.您的WCF今天是否返回json或SOAP?这基本上就是我试图做的;除了v0和v1,而不是v1和v2。是的,WCF当前使用DataContract序列化程序返回json和xml,这就是为什么我想在v0中使用它们。我更愿意使用v1的默认序列化程序。请看一下,您可能需要一个自定义的
MediaTypeFormatter