如何将含WebInvoke的WCF Rest Service代码转换为CoreWCF Rest Service
CoreWCF 兼容的代码转换方案
转换后的接口代码
原WCF的WebInvoke特性在CoreWCF中已被弃用,需改用AspNetCore MVC的HTTP特性结合CoreWCF契约特性实现REST服务:
using CoreWCF; using Microsoft.AspNetCore.Mvc; [ServiceContract] public interface IUserService { [OperationContract] [HttpPost("GetUserData")] // 对应原UriTemplate路径与POST请求方法 [Consumes("application/json")] // 对应原RequestFormat = Json的配置 [Produces("application/json")] // 对应原ResponseFormat = Json的配置 string GetUserDetails([FromBody] GetUserDetailsRequest request); } // 适配原WrappedRequest的请求包裹类(若原服务期望请求体为包裹格式) public class GetUserDetailsRequest { }
关键配置对应说明
WebInvoke(Method = "POST", UriTemplate = "GetUserData")→ 替换为[HttpPost("GetUserData")],直接声明HTTP方法与路由路径RequestFormat/ResponseFormat = WebMessageFormat.Json→ 用[Consumes("application/json")]和[Produces("application/json")]分别指定请求、响应的JSON格式BodyStyle = WebMessageBodyStyle.WrappedRequest→ 通过[FromBody]参数+请求DTO类实现:原WCF的WrappedRequest会将请求体包裹在与方法名同名的对象中,定义对应请求类即可保持一致的请求格式
服务启动配置(Program.cs)
需在项目启动时配置CoreWCF的Web HTTP绑定,启用REST支持:
var builder = WebApplication.CreateBuilder(args); // 添加CoreWCF服务依赖 builder.Services.AddServiceModelServices(); builder.Services.AddServiceModelWebServices(); var app = builder.Build(); // 配置CoreWCF服务端点 app.UseServiceModel(serviceBuilder => { serviceBuilder.AddService<IUserService, UserServiceImplementation>(); // 使用WebHttpBinding启用REST风格服务 serviceBuilder.AddServiceEndpoint<IUserService, UserServiceImplementation>(new WebHttpBinding(), "/api"); }); app.Run();
内容的提问来源于stack exchange,提问作者Tech Learner
相关产品推荐
相关产品推荐

