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>

    这样方便客户端解析了

  • 相关阅读:
    第四章 数组和方法
    JAVA基础笔记
    ios navigationcontroller add multi navigationItem
    Objective-C Runtime能做什么?
    在Xcode中使用Git进行源码版本控制
    分析iOS Crash文件:符号化iOS Crash文件的3种方法
    Core Animation Layer(22)
    Touch Events and UIResponder(19)
    UIPopoverController and Modal View Controllers(13)
    Subclassing UITableViewCell(15)
  • 原文地址:https://www.cnblogs.com/wenlijun/p/4203269.html
Copyright © 2011-2022 走看看