每日踩坑 2018-01-09 WebAPI会如何面对 枚举 参数?
这一块确实有些疑问,
众所周知 枚举参数我们传送枚举值所对应的数字就行了,
以前 Leader 跟我讲过,枚举参数会将字符串值也能够成功转化,而且枚举值定义之外的数字也可以被转为枚举值。
主要的问题在于这后一句,如果定义之外的值能够被转换进去,那么我们是要多写些检查逻辑的。
枚举定义
public enum type
{
Unknow = ,
xxx = ,
yyy = ,
}
首先是 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为我们准备好的方法·。
送上一个扩展方法:
/// <summary>
/// 检查枚举的值是否在枚举范围内
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static bool IsValid(this Enum value)
{
return Enum.IsDefined(value.GetType(), value);
}
每日踩坑 2018-01-09 WebAPI会如何面对 枚举 参数?的更多相关文章
- vue中的小踩坑(01)
前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程: 1.不知道大家有没有注意到 ...
- 每日踩坑 2018-01-09 WebAPI会如何面对URL中的空串string参数?
这个问题是我的同事问我的,可能有点 low 哈. 同事审查我的代码,表示应该对 URL 中的 string 参数进行一个空验证. 我倾向于认为,会无法匹配到路由方法. 然后我就写了一个Test, [H ...
- 每日踩坑 2019-04-09 Web.config configuration 蓝色波浪线 未声明 configuration 标签的解决办法
百度看了几篇答案都没有给出解决方案,看了看 MSDN. https://docs.microsoft.com/zh-cn/previous-versions/ms228147(v=vs.110) 似乎 ...
- 每日踩坑 2019-04-08 VS2015未能找到路径“…\bin\roslyn\csc.exe”的解决方案
使用 Nuget 安装 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 包即可. VS2017都是用 roslyn 编译, VS2015原本的编译 ...
- 每日踩坑 2018-12-25 【Unable to convert MySQL date/time value to System.DateTime】异常
之前的公司一直是用 ORM ,所以底层的事情完全不用在意, 到了这家全是似乎全是 SQL 硬编码 所以也有机会重新去补补以前也没怎么写过的基本 ADO. 不过这两天总有自己写个简易ORM的想法在蠢蠢欲 ...
- 每日踩坑 2018-11-26 MVC Razor ActionLink 生成的URL中多生成了一个参数 ?length=n
RouteConfig 的路由注册如下: routes.MapRoute( name: "Default", url: "{controller}/{action}&qu ...
- 每日踩坑 2018-09-29 .Net Core 控制器中读取 Request.Body
测试代码: 结果: PostMan: 代码: private string GetRequestBodyUTF8String() { this.Request.EnableBuffering(); ; ...
- 每日踩坑 2018-06-19 AutoMapper简单性能测试
想使用 AutoMapper 类库来做一些映射到 DTO 对象的操作 但既然类似这样的类库内部是用反射来实现的,那么会比较在意性能. 所以来简单测试一下性能. 关于测试结果呢 emmmm 我是比较吃惊 ...
- iterm2 "agnoster"主题设置中的一些踩坑 2018.8
主线教程:https://www.cnblogs.com/xishuai/p/mac-iterm2.html (1)在链接的“3.配置oh My zsh”中,编辑vim~/.zshrc后两下回车,然后 ...
随机推荐
- Python 对图片进行人脸识别
import cv2 def detect(path): img = cv2.imread(path) cascade = cv2.CascadeClassifier("/vagrant/d ...
- CMake 示例
1.需求 [1].使用第三方动/静太库 [2].本身代码部分编译为动/静态库 [3]多项目管理 原文转自:http://blog.csdn.net/shuyong1999/article/detail ...
- ICPC World Finals 2019 题解
[A]Azulejos 题意简述: 有两排瓷砖,每排都有 \(n\) 个,每个瓷砖有高度 \(h_i\) 和价格 \(p_i\) 两种属性. 你需要分别重新排列这两排瓷砖,使得同一排的瓷砖满足价格不降 ...
- CodeForces Contest #1137: Round #545 (Div. 1)
比赛传送门:CF #1137. 比赛记录:点我. 每次都自闭的 div1 啊,什么时候才能上 IM 呢. [A]Skyscrapers 题意简述: 有一个 \(n\times m\) 的矩阵 \(a_ ...
- 【转载】Hadoop mapreduce 实现原理
1. 如何用通俗的方法解释MapReduce MapReduce是Google开源的三大技术之一,是对海量数据进行“分而治之”计算框架.为了简单的理解并讲述给客户理解.我们举下面的例子来说明. 首先 ...
- 关于出现Not an editor command: Bundle '**/*.vim'的解决方案【转】
转自:https://blog.csdn.net/YHM07/article/details/49717933 操作系统: $ uname -r 2.6.32-573.7.1.el6.x86_64 $ ...
- 说说流控制(RTS/CTS/DTR/DSR 你都明白了吗?)【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_129041.HTM 以前写的博文,转过来 ============== 先引用一篇网文,作者不详,因几个地方都说自己是 ...
- Windows 10 的一些快捷键
Win键 + Q: 呼出[Cortana] Win键 + W:呼出[Windows INNK 工作区] Win键 + E: 呼出[资源管理器] Win键 + R: 呼出[运行] Win键 + A: 呼 ...
- (并发编程)进程 (multiprocessing--Process实现进程并发)
['创建进程2方式种', '进程对象属性:join方法,守护进程obj.daemon=True,obj.pid, obj.name, obj.terminate(),obj.is_alive()等 ' ...
- Codeforces Round #Pi (Div. 2) C
题意 : 给你一个序列,和 K ,选3 个数,下标严格递增, 满足 为递增的等比数列, 等比为K 思路 : 先统计所有数的个数,枚举等比数列的中间数 A, 计算 A 之后的 A*K的个数, A之前的 ...