这一块确实有些疑问,

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

以前 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会如何面对 枚举 参数?的更多相关文章

  1. vue中的小踩坑(01)

    前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程:         1.不知道大家有没有注意到 ...

  2. 每日踩坑 2018-01-09 WebAPI会如何面对URL中的空串string参数?

    这个问题是我的同事问我的,可能有点 low 哈. 同事审查我的代码,表示应该对 URL 中的 string 参数进行一个空验证. 我倾向于认为,会无法匹配到路由方法. 然后我就写了一个Test, [H ...

  3. 每日踩坑 2019-04-09 Web.config configuration 蓝色波浪线 未声明 configuration 标签的解决办法

    百度看了几篇答案都没有给出解决方案,看了看 MSDN. https://docs.microsoft.com/zh-cn/previous-versions/ms228147(v=vs.110) 似乎 ...

  4. 每日踩坑 2019-04-08 VS2015未能找到路径“…\bin\roslyn\csc.exe”的解决方案

    使用 Nuget 安装 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 包即可. VS2017都是用 roslyn 编译, VS2015原本的编译 ...

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

    之前的公司一直是用 ORM ,所以底层的事情完全不用在意, 到了这家全是似乎全是 SQL 硬编码 所以也有机会重新去补补以前也没怎么写过的基本 ADO. 不过这两天总有自己写个简易ORM的想法在蠢蠢欲 ...

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

    RouteConfig 的路由注册如下: routes.MapRoute( name: "Default", url: "{controller}/{action}&qu ...

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

    测试代码: 结果: PostMan: 代码: private string GetRequestBodyUTF8String() { this.Request.EnableBuffering(); ; ...

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

    想使用 AutoMapper 类库来做一些映射到 DTO 对象的操作 但既然类似这样的类库内部是用反射来实现的,那么会比较在意性能. 所以来简单测试一下性能. 关于测试结果呢 emmmm 我是比较吃惊 ...

  9. iterm2 "agnoster"主题设置中的一些踩坑 2018.8

    主线教程:https://www.cnblogs.com/xishuai/p/mac-iterm2.html (1)在链接的“3.配置oh My zsh”中,编辑vim~/.zshrc后两下回车,然后 ...

随机推荐

  1. Linux安装后首次设置root密码

    ① 1.sudo password root //给指定用户设置密码 2.sudo passwd root //给指定用户设置密码 ②su root //切换到指定用户

  2. SpringBoot注册Servlet、Filter、Listener

    SpringBoot默认是以jar包的方式启动嵌入式的Servlet容易来启动SpringBoot的Web应用,没有web.xml文件 因此我们可以使用以下方式来注册Servlet.Filter.Li ...

  3. ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory Type and Attributes

    1.前言 2. Memory类型和属性 memory分为normal memory和device memory,两种类型的Memory有各自的属性,除了下面介绍的几种属性外,还有其他一些杂项属性 2. ...

  4. Ubuntu/Debian apt-get 404 Not Found Package Repository Errors,无法找到包的错误

    最简单最常用的方法是,使用如下命令更新到新的版本: sudo apt-get dist-upgrade 但是这个方法有时候不一定能起作用,那么可以使用以下直接替换的命令: sudo sed -i -e ...

  5. STOMP Over WebSocket

    Show Table of Contents What is STOMP? STOMP is a simple text-orientated messaging protocol. It defin ...

  6. aliyun服务器ecs被ddos后无法被zabbix-server监控的处理

    ecs绑定的域名被ddos攻击后,阿里云黑洞ecs服务器一个月,此时zabbix服务端无法联系到zabbix-agent会一直报错 解决办法: 1.在ecs前添加slb并把之前指向ecs的域名a.ch ...

  7. 12-关于DOM操作的相关案例

    1.模态框案例 需求: 打开网页时有一个普通的按钮,点击当前按钮显示一个背景图,中心并弹出一个弹出框,点击X的时候会关闭当前的模态框 代码如下: <!DOCTYPE html> <h ...

  8. HTTP2.0 简明笔记

    前言 RFC2616发布以来,一直是互联网发展的基石.HTTP协议也成为了可以在任何领域使用的核心协议,基于这个协议人们设计和部署了越来越多的应用.HTTP的简单本质是其快速发展的关键,但随着越来越多 ...

  9. 【docker】将容器中数据拷贝到主机

    参考:http://blog.csdn.net/yangzhenping/article/details/43667785 docker cp <containerId>:/file/pa ...

  10. PHP中的10个实用函数

    1.php_check_syntax 这个函数可以用来检查特定文件中的PHP语法是否正确. <?php $error_message = ""; $filename = &q ...