环境:Web Api 返回值类型为DTO实体,继承基类DTO---BaseResultDto

public class BaseResultDto
{
/// <summary>
/// 结果代码
/// </summary>
[XmlElement("result")]
public int Result { get; set; } /// <summary>
/// 结果信息
/// </summary>
[XmlElement("message")]
public string Message { get; set; } /// <summary>
/// 构造函数
/// </summary>
public BaseResultDto()
{
this.Result = ResponseCode.SUCCESS;
this.Message = string.Empty;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="result"></param>
/// <param name="message"></param>
public BaseResultDto(int result, string message)
{
this.Result = result;
this.Message = message;
}
}

背景:在执行每个Action前先执行筛选器操作,在筛选中,如果报错,无法返回当前Action的返回值类型,如果都返回基类DTO,客户端无法解析当前Action的DTO名称(他们比较懒。。。)所以准备在筛选器中,截获当前请求的方法返回值类型,并在筛选报错的情况下返回。

public override void OnActionExecuting(HttpActionContext actionContext)
{
  string retClass = actionContext.ActionDescriptor.ReturnType.AssemblyQualifiedName;
  Type t;    
  object obj;
  t = Type.GetType(retClass);//通过string类型的retClass获得同名类“t”   if (t == null)
{
  return;
  }
  obj = t.CreateInstance();
  if (!WebConfig.GetEBOpenCity.Contains(city))
  {
    if (!obj.TrySetValue("message", "电商尚未开通该城市"))
{
  return;
    }
    responseMessage.StatusCode = HttpStatusCode.OK;
responseMessage.Content = new ObjectContent(t, obj, new CustomXmlFormatter());
actionContext.Response = responseMessage;
return;
    }
}

这样如果我请求的方法是:

public MyTradeListDTO GetMyTradeList(string mobile, int pageIndex, int pageSize)
{
//...
}

其中MyTradeListDTO继承BaseResultDto,如果在筛选器中报错,返回的是:

<MyTradeListDTO>
<result>-99</result>
<message>电商尚未开通该城市</message>
<Count>0</Count>
</MyTradeListDTO>

这样方便客户端解析了

WebApi 通过类名获取类并实例化的更多相关文章

  1. php 通过类名获取类的文件地址

    $reflector = new ReflectionClass("Child"); $fn = $reflector->getFileName(); return dirn ...

  2. C#反射实例应用--------获取程序集信息和通过类名创建类实例

    AppDomain.CurrentDomain.GetAssemblies();获取程序集,但是获取的只是已经加载的dll,引用的获取不到. System.Reflection.Assembly.Ge ...

  3. C#反射 获取程序集信息和通过类名创建类实例(转载)

    C#反射获取程序集信息和通过类名创建类实例 . System.Reflection 命名空间:包含通过检查托管代码中程序集.模块.成员.参数和其他实体的元数据来检索其相关信息的类型. Assembly ...

  4. WebAPI的AuthorizeAttribute扩展类中获取POST提交的数据

    在WEBAPI中,AuthorizeAttribute类重写时,如何获取post数据是个难题,网上找资料也不好使,只能自己研究,通过研究发现,WEBAPI给了我们获取POST数据的可能,下面介绍一下: ...

  5. Python中如何获取类属性的列表

    这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...

  6. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  7. 【python】-- 类的实例化过程、特征、共有属性和私有属性

    实例化过程 1.类的定义和语法 class dog(object): #用class定义类 "dog class" #对类的说明 def __init__(self,name): ...

  8. day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版

    day21 面向对象的初识 面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题. 类: 具有相同属性和功能的一类事物. 对 ...

  9. .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性

    了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...

随机推荐

  1. Android 图标尺寸与设计

    样例和图解 外框:整体大小 ↑ 边框:图标留白大小 ↓ 图标:外图标的大小 ↑ 阴影:阴影特效大小 ↓ 图形:内图标的大小 ↑ 可选视图权重:使用两种类型的图形尺寸可以达到统一的视觉权重(可选),   ...

  2. win7 hosts文件更改后无效,不生效问题

    通过记事本修改完hosts文件后,域名解析没有生效. 注:可以正常保存修改.服务dnsclient也已经启动 最后发现是hosts文件最后一行不是空行,回车后问题解决

  3. 【emWin】例程四:显示文本

    实验指导书及代码包下载: http://pan.baidu.com/s/1jHOYdqm

  4. 阿里云服务器Linux CentOS安装配置(五)jetty配置、部署

    阿里云服务器Linux CentOS安装配置(五)jetty配置.部署 1.官网下载jetty:wget http://repo1.maven.org/maven2/org/eclipse/jetty ...

  5. selenium python的使用(二)

    1.selenium获取到的信息是 把页面加载完毕之后 获取异步加载的html源码 html=driver.find_element_by_xpath("/html").get_a ...

  6. GDB调试32位汇编堆栈分析

    GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+ ...

  7. 关于flex中正则表达式上下文匹配的问题

    按照课本与网上的说法,斜杠'/'表示匹配上下文,例如ab/cd表示当ab后面有cd时匹配ab 然而如果实际这么写,flex在调用该正则表达式时触发'unrecognized rule' flex源代码 ...

  8. 一个node项目的框架搭建流程

    项目服务端编程语言node,前端js,数据库mongodb, 开发工具用webstorm. 使用express应用生成器,生成项目雏形. 安装应用生成器工具,命令是npm install expres ...

  9. 启动Hive时出现的问题

    Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to i ...

  10. 项目在vs中打开后识别不出来ashx页面的解决方法

    在web.config配置文件中指定页面版本 <add key="webPages:Version" value="2.0"/> <?xml ...