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 { /* 特性说明 特性本质是一个继承和使用了系 ...
随机推荐
- java.lang.NoSuchMethodError:
Servlet.service() for servlet [springMVC] in context with path [/mobile] threw exception [Handler pr ...
- 转OSGchina中,array老大的名词解释
转OSGchina中,array老大的名词解释 转自:http://ydwcowboy.blog.163.com/blog/static/25849015200983518395/ osg:: Cle ...
- react-native 之布局篇
一.宽度单位和像素密度 react的宽度不支持百分比,设置宽度时不需要带单位,那么默认的单位是什么呢? /** * Sample React Native App * https://github.c ...
- 封装ajax(二)闭包的形式
(function(){ var $=(function(){ function create(){ if(window.XMLHttpRequest){ var xhr=new XMLHttpReq ...
- wifi 破解
基础的知识: ESSID :无线网络的名字 BSSID :是AP的mac地址 CH: 工作信道 AP :无线访问接入点 WEP WPA/WPA2 STATION :客户机mac DHCP ...
- windows快捷键集锦
输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是8090,首先找到它. 查看被占用端口对应的PID,输入命令:netstat -aon|findstr &q ...
- 然当装入Ubuntu双系统时,会出现无线硬件开关关闭的问题,当然也就无法连网
rfkill list all 会出现如下提示 0:ideapad_wlan: Wireless LAN Soft blocked: no Hard blocked:yes ...
- java工程师 学习路线图
- Android组件安全
今天在看有关Android组件安全的东西 1.Activity Android系统组件在指定Intent过滤器(intent-filter)后,默认是可以被外部程序(签名不同,用户ID不同)访问的,在 ...
- SMTP Error: Could not connect to SMTP host
PHPMailer是一个非常棒的开源邮件类,使用也非常简单,但是对于虚拟主机来说,往往要受到各种限制.刚才我在虚拟主机上使用PHPMailer就遇到一个“SMTP Error: Could not c ...