每日踩坑 2018-01-09 WebAPI会如何面对 枚举 参数?

这一块确实有些疑问,

众所周知 枚举参数我们传送枚举值所对应的数字就行了,

以前 Leader 跟我讲过,枚举参数会将字符串值也能够成功转化,而且枚举值定义之外的数字也可以被转为枚举值。

主要的问题在于这后一句,如果定义之外的值能够被转换进去,那么我们是要多写些检查逻辑的。

枚举定义

        public enum type
        {
            Unknow = 0,
            xxx = 1,
            yyy = 2,
        }

首先是 GET 方法,使用 URL 来传值。

        [HttpGet]
        [Route("api/test/getlist/{type}")]
        public string[] GetList(type type)
        {
            return new string[] { type.ToString() };
        }

以下的请求都成功的取到值:

http://localhost:32076/api/test/getlist/xxx

http://localhost:32076/api/test/getlist/1

http://localhost:32076/api/test/getlist/5 (是的没错 进去了 头疼,想起我以前很多都没写过检查

以下的请求没能成功的取到值:

http://localhost:32076/api/test/getlist/  (找不到方法

http://localhost:32076/api/test/getlist/xxxx  (请求无效 枚举参数不能为 null

然后使用 POST 和 对象参数

        public class Data
        {
            public int Id { get; set; }

            public string Name { get; set; }

            public type Type { get; set; }
        }

        [HttpPost]
        [Route("api/test/getlist")]
        public string[] GetList(Data Data)

http://localhost:32076/api/test/getlist/  (post 空对象 调用ok,当然参数实例为空。

http://localhost:32076/api/test/getlist/  (post 对象 仅Id传值 调用ok,此时枚举默认值0(关于枚举默认值有很多文章,自行百度。

也就是说我们应该在接口层对枚举进行基本的值范围检查。

我见过很多人写反射来做这个检查。其实枚举类上就有NET为我们准备好的方法·。

送上一个扩展方法:

1         /// <summary>
2         /// 检查枚举的值是否在枚举范围内
3         /// </summary>
4         /// <param name="value"></param>
5         /// <returns></returns>
6         public static bool IsValid(this Enum value)
7         {
8             return Enum.IsDefined(value.GetType(), value);
9         }

原文地址:https://www.cnblogs.com/Aaxuan/p/10243148.html

时间: 2024-10-08 06:08:17

每日踩坑 2018-01-09 WebAPI会如何面对 枚举 参数?的相关文章

每日踩坑 2018-06-19 AutoMapper简单性能测试

想使用 AutoMapper 类库来做一些映射到 DTO 对象的操作 但既然类似这样的类库内部是用反射来实现的,那么会比较在意性能. 所以来简单测试一下性能. 关于测试结果呢 emmmm 我是比较吃惊的,这个吃惊有两个,一个是它居然这么快,然后它居然这么慢.(手动狗头 反正挺吃惊的. 原文地址:https://www.cnblogs.com/Aaxuan/p/9206185.html

每日踩坑 2018-09-29 .Net Core 控制器中读取 Request.Body

测试代码: 结果: PostMan: 代码: 1 private string GetRequestBodyUTF8String() 2 { 3 this.Request.EnableBuffering(); 4 this.Request.Body.Position = 0; 5 Encoding encoding = System.Text.UTF8Encoding.Default; 6 if (this.Request.ContentLength > 0 && this.Requ

每日踩坑 2018-11-26 MVC Razor ActionLink 生成的URL中多生成了一个参数 ?length=n

RouteConfig 的路由注册如下: routes.MapRoute( name: "Default", url: "{controller}/{action}", defaults: new { controller = "Home", action = "Index" } ); Razor 代码: @Html.ActionLink(" 主页", "Index", "Ho

每日踩坑 2018-12-25 【Unable to convert MySQL date/time value to System.DateTime】异常

之前的公司一直是用 ORM ,所以底层的事情完全不用在意, 到了这家全是似乎全是 SQL 硬编码 所以也有机会重新去补补以前也没怎么写过的基本 ADO. 不过这两天总有自己写个简易ORM的想法在蠢蠢欲动. 这个异常的原因是 在读取 MySql 数据库时,如果存在字段类型为 date/datetime 时可能会出现以下问题“Unable to convert MySQL date/time value to System.DateTime” 因为我数据库这个字段设置成了非空字段, 该类型(date

每日踩坑 2019-08-22 Unity 依赖注入 未能为类选择构造函数

Unity会自动使用参数最多的构造函数来进行创建对象, 假如在这个类中有多个构造函数时,而我们要指定其中一个作为Unity进行创建对象则必需用到 [InjectionConstructor] 气死我了 怎么会有这么睿智的玩意, 明明都传 ParameterOverride 了, 居然不会根据参数匹配. 参考:https://www.cnblogs.com/wujy/p/3321478.html https://www.cnblogs.com/chinadeveloper/p/6184307.ht

2018.11.28 Android踩坑(读写文件)

在学到使用Android Device Monitor 查看文件的时候,发现Android Device Monitor在Android Studio里面找不到了,网上查了原来是被官方弃用了,现在通过命令行的方式启动 1.打开Project Structure找到sdk安装路径 2.找到这个路径打开里面tools文件夹下面的monitor.bat双击运行即可打开Android Device Monitor 虽然说找到了Android Device Monitor,但是打开报了个Could not

flutter踩坑01:下载包失败:Could not resolve all artifacts for configuration....

flutter踩坑01:下载包失败:Could not resolve all artifacts for configuration.... flutter在下载依赖失败或者flutter run运行的时候出现某个jar或者文件下载失败的时候,如下: FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':url_launcher'. > Could

AI相关 TensorFlow -卷积神经网络 踩坑日记之一

上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是google开源出来的人工智能库,由python语言写的 官网地址:http://www.tensorflow.org/   请用科学上网访问 中文地址:http://www.tensorfly.cn/ 当然还有其他AI库,不过大多数都是由python 写的 .net 的AI库叫 Accord.net

踩坑记:httpComponents 的 EntityUtils

今天写的一个服务程序,有人报告获得的数据中文乱码,而我是用 apache 通过 httpComponents 去取得数据的,于是开启日志的 debug 级别. 在日志里果然发现中文不见了,有乱码出现: 2014-07-02 16:35:01.348 DEBUG [Wire.java:86] http-outgoing-8 << "<?xml version="1.0" encoding="UTF-8"?>... subject=&q