WCF构建 REST Service
今天在下试了下WCF 4新特性REST,总体比较简单。使用Online Templates中的WCF REST Service Template
默认会有一个sampleItem的例子,和以前的WCF Service不同,这里的Service既不是一个.svc文件,也没有专门定义一个接口作为ServiceContract (服务契约)。
WCF为服务的方法不再需要标记为[OperationContract],代以[WebGet]或者[WebInvoke]来标记.
SampleItem就是以往所知的DataContract(数据契约),不过现在即使不加DataContract特性来标记也可以 。
Global.asax和Global.asax.cs。Global.asax.cs中定义了Routes,表示所有访问HOST/Service1的请求都要由Service1这个类来处理,相应UserService也是。
public class Global : HttpApplication { void Application_Start(object sender, EventArgs e) { RegisterRoutes(); } private void RegisterRoutes() { // Edit the base address of Service1 by replacing the "Service1" string below RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1))); RouteTable.Routes.Add(new ServiceRoute("UserService", new WebServiceHostFactory(), typeof(UserService))); } }
UserService Code:
[ServiceContract(Namespace = "RestUserService")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] public class UserService { List<User> _list = GetUserData(); private static List<User> GetUserData() { return new List<User> { new User { UserName="Task1", Age=100, Birthday=DateTime.Now }, new User { UserName="Task2", Age=100, Birthday=DateTime.Now }, new User { UserName="Task3", Age=100, Birthday=DateTime.Now }, new User { UserName="Task4", Age=100, Birthday=DateTime.Now }, new User { UserName="Task5", Age=100, Birthday=DateTime.Now }, new User { UserName="Task6", Age=100, Birthday=DateTime.Now }, new User { UserName="Task7", Age=100, Birthday=DateTime.Now }, new User { UserName="Task8", Age=100, Birthday=DateTime.Now } }; } public void DoWork() { throw new NotImplementedException(); } /// <summary> /// 默认查询 /// </summary> /// <returns></returns> [WebGet(UriTemplate = "")] public List<User> GetCollection() { return _list; } /// <summary> /// 查询用户信息 /// </summary> /// <returns></returns> [WebGet(UriTemplate = "/User/Xml", ResponseFormat = WebMessageFormat.Xml)] public List<User> GetUserXml() { return _list; } /// <summary> /// 查询用户信息 /// </summary> /// <returns></returns> [WebGet(UriTemplate = "/User/Json", ResponseFormat = WebMessageFormat.Json)] public List<User> GetUserJson() { return _list; } /// <summary> /// 查询单个用户信息 /// </summary> /// <returns></returns> [WebInvoke(UriTemplate = "/User/{Name}", Method = "GET", ResponseFormat = WebMessageFormat.Json)] public User GetUserByName(string name) { return GetUserData().Where(u => u.UserName == name).FirstOrDefault(); } /// <summary> /// 添加一个用户 /// </summary> /// <param name="user"></param> /// <returns></returns> [WebInvoke(UriTemplate = "", Method = "POST")] public bool Add(User user) { if (user != null) { return true; } else { return false; } } /// <summary> /// 删除一个用户 /// </summary> /// <param name="id"></param> /// <returns></returns> [WebInvoke(UriTemplate = "{id}", Method = "DELETE")] public bool Delete(string id) { return true; } }
模板默认配置了Help页面浏览即可
Refer:
http://debugmode.net/2011/05/15/wcf-rest-service-with-josn-data/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述