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>

这样方便客户端解析了

转载于:https://www.cnblogs.com/wenlijun/p/4203269.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值