WebApi 通过类名获取类并实例化
环境: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 通过类名获取类并实例化的更多相关文章
- php 通过类名获取类的文件地址
$reflector = new ReflectionClass("Child"); $fn = $reflector->getFileName(); return dirn ...
- C#反射实例应用--------获取程序集信息和通过类名创建类实例
AppDomain.CurrentDomain.GetAssemblies();获取程序集,但是获取的只是已经加载的dll,引用的获取不到. System.Reflection.Assembly.Ge ...
- C#反射 获取程序集信息和通过类名创建类实例(转载)
C#反射获取程序集信息和通过类名创建类实例 . System.Reflection 命名空间:包含通过检查托管代码中程序集.模块.成员.参数和其他实体的元数据来检索其相关信息的类型. Assembly ...
- WebAPI的AuthorizeAttribute扩展类中获取POST提交的数据
在WEBAPI中,AuthorizeAttribute类重写时,如何获取post数据是个难题,网上找资料也不好使,只能自己研究,通过研究发现,WEBAPI给了我们获取POST数据的可能,下面介绍一下: ...
- Python中如何获取类属性的列表
这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...
- 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息
0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...
- 【python】-- 类的实例化过程、特征、共有属性和私有属性
实例化过程 1.类的定义和语法 class dog(object): #用class定义类 "dog class" #对类的说明 def __init__(self,name): ...
- day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版
day21 面向对象的初识 面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题. 类: 具有相同属性和功能的一类事物. 对 ...
- .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性
了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...
随机推荐
- Ubuntu 16.04 install 搜狗输入法
1.#先添加以下源 sudo add-apt-repository ppa:fcitx-team/nightly 2.#添加源之后需要更新一下系统 sudo apt-get update 3.#开始安 ...
- Python标准异常topic
Python标准异常topic AssertionError 断言语句 (assert) ...
- Maya Plugin 编译Maya插件
Maya自身的功能就已经非常强大了,但是更棒的是它的扩展性非常强,提供API让用户自己来编写插件Plugin.Maya的插件主要是两种,一种是用C++编写的,后缀为".mll",另 ...
- BZOJ 2761: [JLOI2011]不重复数字 水题
2761: [JLOI2011]不重复数字 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2100 Solved: 809 题目连接 http:// ...
- Java 对象拷贝方式
(1)BeanUtils.cloneBean()使用: http://www.cnblogs.com/fervour/archive/2009/12/18/1627868.html package c ...
- 在Ubuntu下配置运行Hadoop2.4.0单节点配置
还没有修改hosts,请先按前文修改. 还没安装java的,请按照前文配置. (1)增加用户并设立公钥: sudo addgroup hadoop sudo adduser --ingroup had ...
- PSI and index do not match: PSI and index do not match
解决来自:http://blog.csdn.net/huberjobs/article/details/50829603
- DP HDU1421
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- vmware中两台虚拟机互相访问
hosts文件 简单说,就是本来访问某个机器是通过其ip,在hosts文件中给ip对应一个名字,那么就可以通过名字来替代ip去访问该机器了(名字显然比ip好记) 环境:宿主机win10系统,安装了 ...
- css基础知识
CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明.其中选择器通常是您需要改变样式的 HTML 元素(比如p标签),也可以是节点的属性的值(比如id,class):每条声明都是一条字典key ...