定义了一个返回枚举:

  1. public enum ResultExceptionEnum
  2. {
  3. 积分不足 = ,
  4. 支付失败 = ,
  5. 用户不存在 = ,
  6. 验证码发送失败 = ,
  7. 验证码不正确 = ,
  8. 账号已存在 = ,
  9. 昵称已存在 = ,
  10.  
  11. 公会不存在 = ,
  12. 公会名称已存在 = ,
  13. 用户不在此公会 = ,
  14.  
  15. 社区不存在 = ,
  16. 社区名称已存在 = ,
  17. }

定义一个返回 Exception

  1. public class ResultException : Exception
  2. {
  3. public ResultException(){}
  4.  
  5. public ResultException(int code, string msg)
  6. {
  7. Code = code;
  8. Msg = msg;
  9. }
  10.  
  11. public ResultException(ResultExceptionEnum code)
  12. {
  13. Code = code.GetHashCode();
  14. Msg = Enum.GetName(typeof(ResultExceptionEnum), code);
  15. }
  16.  
  17. public int Code { get; set; }
  18.  
  19. public string Msg { get; set; }
  20.  
  21. public override string ToString()
  22. {
  23. return JsonConvert.SerializeObject(new { code = Code, msg = Msg });
  24. }
  25.  
  26. public object ToResult()
  27. {
  28. var obj = new { code = Code, msg = Msg };
  29. return obj;
  30. }
  31. }

删除操作返回:

  1. // DELETE: api/Values/5
  2. public IHttpActionResult Delete(int id)
  3. {
  4.  
  5. try
  6. {
  7. throw new ResultException(ResultExceptionEnum.验证码不正确);
  8. }
  9. catch (ResultException ex)
  10. {
  11. return Ok(ex.ToResult());
  12. }
  13. //return Ok(new { code = 200, msg = "删除成功" });
  14. }

上面两个风格,

1.  抛出异常,返回。

2. 直接返回

结果:

再来个异常版:

  1. // DELETE: api/Values/5
  2. public IHttpActionResult Delete(int id)
  3. {
  4. //try
  5. //{
  6. // throw new ResultException(ResultExceptionEnum.验证码不正确);
  7. //}
  8. //catch (ResultException ex)
  9. //{
  10. // return Ok(ex.ToResult());
  11. //}
  12. //return Ok(new { code = 200, msg = "删除成功" });
  13.  
  14. throw new ResultException(ResultExceptionEnum.验证码不正确);
  15. }

配置下:

WebApiConfig

config.Filters.Add(new WebApiExceptionFilter());

  1. /// <summary>
  2. /// 全局API异常
  3. /// </summary>
  4. public class WebApiExceptionFilter : ExceptionFilterAttribute
  5. {
  6. /// <summary>
  7. ///
  8. /// </summary>
  9. /// <param name="context"></param>
  10. public override void OnException(HttpActionExecutedContext context)
  11. {
  12. var ex = context.Exception;
  13. if(ex is ResultException)
  14. {
  15. var ex2 = (ResultException)ex;
  16. context.Response = context.Request.CreateResponse(ex2.ToResult());
  17. }
  18. base.OnException(context);
  19. }
  20. }

只是这样抛异常 对性能有影响吗?

WebAPI 操作返回的更多相关文章

  1. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...

  2. IBatisNet:让insert操作返回新增记录的主键值

    项目引用ibatis包: IBatisNet.Common.dll --文件版本1.6.2.0 IBatisNet.DataAccess.dll IBatisNet.DataMapper.dll 项目 ...

  3. webapi的返回类型,webapi返回图片

    1.0 首先是返回常用的系统类型,当然这些返回方式不常用到.如:int,string,list,array等.这些类型直接返回即可. public List<string> Get() { ...

  4. 如何让webapi只返回json格式数据

    最近脑子不好用,总记不住事,以前搞过让webapi只返回json格式的数据,今天有人问我又突然想不起了,后来总结一下,备忘一下,大概有下面几种处理方式 1.在WebApiConfig类的Registe ...

  5. MyBatis返回主键,MyBatis Insert操作返回主键

    MyBatis返回主键,MyBatis Insert操作返回主键 >>>>>>>>>>>>>>>>> ...

  6. WebApi 接口返回值类型详解 ( 转 )

    使用过Webapi的园友应该都知道,Webapi的接口返回值主要有四种类型 void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 此篇就围绕这四块分 ...

  7. WebApi接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.作为程序猿,我们都知道参数和返回值是编程领域不可分割的两大块,此前分享了 ...

  8. WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型

    首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...

  9. (转)C# WebApi 接口返回值不困惑:返回值类型详解

    原文地址:http://www.cnblogs.com/landeanfen/p/5501487.html 正文 前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi ...

随机推荐

  1. 測試 battery capacity curve 的負載

    昨天有同事問說, 他要測試 battery capacity curve, 並且負載要使用 33mA, 於是我想到有一個 apk 名稱為 快速放電 (最下方),可以控制 cpu 的 load, 他試了 ...

  2. C++ STL结构总结

    1. 什么是STL 它的全名是stand template library, 标准模板库,主要是将一些结构和算法写成模板,以便能够实现对任意类型的对象都可以操作,而不需要再一次去写一些算法及结构. 它 ...

  3. Github精选 – 适合移动端的HTML5 Datepicker

     2016-01-12 (updated: 2017-01-07) 15731 通过 HTML5 的 <input> 新属性可以简单方便地调用手机的原生 Datepicker,但功能较弱, ...

  4. 调用微信JS-SDK接口上传图片

    最近要在微信上做个问卷调查,有个上传图片功能,折腾找了半天资料,都不好弄,最终打算调用微信提供的上传图片接口,实现上传图片功能!此功能最大的好处是可以在微信服务器上暂存图片,减少本地服务器图片的缓存, ...

  5. 关于 拼接 url 连接 参数的问题(爬虫)。

    比如这里 我找的 后台请求的json的链接: 第一页: http://www.igoldenbeta.com:8080/cn-jsfund-server-mobile/bkt/api?appkey=1 ...

  6. How ConcurrentHashMap offers higher concurrency without compromising thread safety

    https://www.ibm.com/developerworks/library/j-jtp08223/

  7. android之 Activity跳转出现闪屏

    原文:http://blog.csdn.net/az313/article/details/17321549 同一个应用,在不同手机上测试,Activity之间跳转出现闪屏,界面来回跳转…… 查阅网上 ...

  8. 8种json数据查询方式

    你有没有对“在复杂的JSON数据结构中查找匹配内容”而烦恼.这里有8种不同的方式可以做到: JsonSQL JsonSQL实现了使用SQL select语句在json数据结构中查询的功能. 例子: ? ...

  9. SocketCluster

    官网地址:https://socketcluster.io/ SocketCluster的组成部分,即运行一个SocketCluster服务器,它在服务器生成的进程 1.主进程(Server.js)一 ...

  10. KMS使用CLion作为IDE来调试

    KMS使用CLion作为IDE来调试,打开kms相应模块的目录,CLion自动识别相应的CMakeLists.txt. 然而会make失败,经搜索,看到Clion使用的自带的cmake,因此系统中安装 ...