webapi测试例子

news/2024/10/9 15:43:07/文章来源:https://www.cnblogs.com/apple-hu/p/18454396

 

1. 修改WebApiConfig.cs中路由路径

    问题:webapi的默认路由并不需要指定action的名称(WebApi的默认路由是通过http的方法get/post/put/delete去匹配对应的action),

               但默认路由模板无法满足针对一种资源一种请求方式的多种操作。

    解决:打开App_Start文件夹下,WebApiConfig.cs ,修改路由,加上{action}/ ,其中,{id}是api接口函数中的参数。。
               这样就可以在api接口中通过接口函数名,来导向我们希望调用的api函数,否则,只能通过controller来导向,就可能会造成有相同参数的不同名函数冲突。

 View Code

 

2. 添加控制器
    a. 右键Controllers文件夹---添加---控制器)

    b. 左边选择web API页签,右边选择控制器(空)

     c. 给控制器命名(只需要改高亮部分,后面的Controller保留)

 3. 功能测试

    a. 右键Models文件夹,选择新建类

public class Game{public string name { get; set; }public string director { get; set; }public string actor { get; set; }public string type { get; set; }public int price { get; set; }}public class Product{public int Id { get; set; }public string Name { get; set; }public string Category { get; set; }public decimal Price { get; set; }}
View Code

    b. 右键Controllers文件夹,增加控制器

 public class TestController : ApiController{Game[] myGame = new Game[]{new Game { name="one",director="one.1",actor="a",type="动漫",price=28},new Game { name="two",director="two.1",actor="b",type="惊悚",price=32},new Game { name="three",director="three.1",actor="c",type="惊悚",price=28},new Game { name="four",director="four.1",actor="d",type="动漫",price=28}};public IEnumerable<Game> GetAllMovies(){return myGame;}public IHttpActionResult GetMovie(string name)    //异步方式创建有什么作用
        {var mov = myGame.FirstOrDefault((p) => p.name == name);if (myGame == null){return NotFound();}return Ok(myGame);}}public class ProductsController : ApiController{Product[] products = new Product[]{new Product { Id = 1, Name = "Apple Soup", Category = "Groceries", Price = 1 },new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 4.35M },new Product { Id = 3, Name = "Linda", Category = "Hardware", Price = 11.2M }};public IEnumerable<Product> GetAllProducts(){return products;}public IHttpActionResult GetProduct(int id){var product = products.FirstOrDefault((p) => p.Id == id);if (product == null){return NotFound();}return Ok(product);}}public class ParaController : ApiController{[HttpGet]public string ParaExample(string param1, int param2){string res = "";res = param1 + param2.ToString();//其他操作return res;}}
View Code

    c. 点击运行,在URL后加具体action路径

结果如下:

d. 去掉xml返回格式、设置json返回

 public static class WebApiConfig{public static void Register(HttpConfiguration config){// Web API 配置和服务// Web API 路由
            config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name: "DefaultApi",//修改路由,加上{action}/ ,这样就可以在api接口中通过接口函数名,来导向我们希望调用的api函数,//否则,只能通过controller来导向,就可能会造成有相同参数的不同名函数,冲突。其中,{id}是api接口函数中的参数routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });//去掉xml返回格式、设置json字段命名采用var appXmlType =config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);}}
修改WebApiConfig.cs

 

     e. 统一返回值格式

 public class RtnValue{private string msgModel = "{{\"code\":{0},\"message\":\"{1}\",\"result\":{2}}}";public RtnValue(){}public HttpResponseMessage MsgFormat(ResponseCode code, string explanation, string result){string r = @"^(\-|\+)?\d+(\.\d+)?$";string json = string.Empty;if (Regex.IsMatch(result, r) || result.ToLower() == "true" || result.ToLower() == "false" || result == "[]" || result.Contains('{')){json = string.Format(msgModel, (int)code, explanation, result);}else{if (result.Contains('"')){json = string.Format(msgModel, (int)code, explanation, result);}else{json = string.Format(msgModel, (int)code, explanation, "\"" + result + "\"");}}return new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") };}}public enum ResponseCode{操作失败 = 00000,操作成功 = 10000,}public class CheckController : ApiController{//检查用户名是否已注册private RtnValue tool = new RtnValue();[HttpGet]public HttpResponseMessage CheckUserName(string _userName){int num = UserInfoGetCount(_userName);//查询是否存在该用户if (num > 0){return tool.MsgFormat(ResponseCode.操作失败, "不可注册/用户已注册", "1 " + _userName);}else{return tool.MsgFormat(ResponseCode.操作成功, "可注册", "0 " + _userName);}}private int UserInfoGetCount(string username){//return Convert.ToInt32(SearchValue("select count(id) from userinfo where username='" + username + "'"));return username == "admin" ? 1 : 0;}}
View Code

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LED显示驱动/高亮数显屏驱动芯片VK16K33A 采用SOP28封装形式,可支持16SEGx8GRID的点阵LED显示面板

VK16K33A是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,邱婷:188-2366-8825内部集成有数据 锁存器、键盘扫描、LED 驱动模块等电路。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳 极,GRID脚接LED阴极,可支持16SEGx8GRID的点阵LED显示面板。最大支持133的按键。内…

PostgreSQL E转义字符

背景:多行数据作为select的where查询条件,数据库里直接找能找到,但select查询不到 数据AAA BBB CCC select ratmplid from certificates where privka = AAA BBB CCC ; 查询不到数据,修改如下 select ratmplid from certificates where privka = EAAA\nBBB\nCCC\n; 也可以借…

打通前后端流程,案例解读华为云开源低代码引擎解决方案

华为云在前端领域提供了DevUI Suites的场景级解决方案与打通前端与服务端的TinyEngine低码引擎,帮助开发者开发专业、设计统一的前端场景。本文分享自华为云社区《使用场景级前端解决方案及低代码引擎,助力开发者生产效能提升》,来源:《华为云DTSE》第五期开源专刊 当前前端…

GET代码的代码和公式

1. 数据及代码中的变量 初始化变量B: 存储每个 block(残基)的类型,来自 VOCAB.symbol_to_idx。 A: 存储原子的类型,来自 VOCAB.get_atom_global_idx() 和 block.to_data()。 X: 存储原子的坐标信息。 atom_positions: 存储原子位置的索引,用于进一步计算原子的几何信息。 …

数据库属性带下划线的注意事项(下划线bug)

①如果数据库的属性带有下划线,如下②实体类代码1 package com.lian.pojo;2 3 import com.baomidou.mybatisplus.annotation.IdType;4 import com.baomidou.mybatisplus.annotation.TableField;5 import com.baomidou.mybatisplus.annotation.TableId;6 import java.io.Serial…

高效开发最佳实践全面指南

学会表达在写复杂表达式时,可使用一个变量将表达式用变量的方式表示 函数、变量命名要语义化学会复盘花一些时间清理自己的代码 尽量以函数式进行编程拥抱变化在开发功能时,要考虑变化的情况。该死的产品经理在封装时要考虑能否封装成一个 js 模块,后续只需要调用响应的 API…

【 java 安全】Java对象都是堆上分配?看完Java中对象逃逸分析就知道答案了

原创 龙虾编程随着JIT编译期的发展与逃逸分析技术逐渐成熟,所有的对象都分配到堆上也渐渐变得不是一定的。在编译期间JIT会对代码做很多优化,其中有一部分优化是减少内存堆分配压力,这里有一种重要的技术叫逃逸分析。逃逸分析是一种可以有效减少Java程序中同步负载和内存堆分…

【SQL SERVER】PIVOT与UNPIVOT之行列转换

基础例子 在数据处理的过程中,常常遇到行列转换的问题。例如,人员的考勤。可能表格中,1~12月都在同一个字段,实际中,为了查看方便,同一个人的考勤记录,能在同一行,这样查询起来比较方便(行转列)。或者,表格设计的时候就是1~12月,在其他数据分析时需要将列转行。即类…

SkyWalking组件自定义链路追踪

SkyWalking组件通过添加相关配置就可以获取到接口的相关信息,更加方便的追踪和处理问题 接下去讲下步骤: 1、在service层添加两个注解;@Trace@Tags({@Tag(key = "getDataByCode",value = "returnedObj"),@Tag(key = "getDataByCode",value = …

沈师傅食品携手纷享销客CRM系统,加速数字化转型

沈师傅食品有限公司是一家专业研发、生产和销售鸡蛋干系列产品的大型集团 公司,技术与研发实力雄厚,先后获得多项国家专利。公司成立于2006年,开创 了全新的鸡蛋干品类,创办人沈国平先生素有“鸡蛋干之父”之称,先后被央视、 四川电视台、北京卫视、优酷、凤凰网等国内知名…

总奖金高达10万元!华为算法精英实战营“亲和任务调度系统”来啦!

在无线领域,利用AI技术对任务准确建模、多核系统任务最优调度等问题都是非常有价值的算法难题。随着物联网、大数据、AI时代的到来,时延、可靠性等指标要求越来越高,海量的数据分析、大量复杂的运算对CPU的算力要求越来越高。CPU内部的大部分资源用于缓存和逻辑控制,适合运…

webapi 创建(空)

1. 打开vs2019 ,选择创建新项目2. 选择ASP.NET Web 应用程序(.NET Framework)3. 配置项目信息(名称,位置,框架)4. 选择空模板(WebAPI复选框选中)5. 这样里面就没有MVC的三层,因为前后端分离,webapi中只有两层。6. 空的WebApi程序创建完成。