zoukankan      html  css  js  c++  java
  • 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>

    这样方便客户端解析了

  • 相关阅读:
    JerryScript:物联网开发者的得力工具
    使用 scipy.fft 进行Fourier Transform:Python 信号处理
    解析WeNet云端推理部署代码
    华为云消息队列服务荣获首个双擎可信云稳定性最高级认证
    .NET从互联网上获取当前时间并更新系统时间
    豆瓣电台WP7客户端 开发记录1
    HTML格式化为标准XML
    豆瓣电台WP7客户端 开发记录6
    豆瓣电台 for WP7 客户端开源
    豆瓣电台WP7客户端 开发记录7
  • 原文地址:https://www.cnblogs.com/wenlijun/p/4203269.html
Copyright © 2011-2022 走看看