首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如图所示,如何在ASP.net webapi上创建响应格式?

如图所示,如何在ASP.net webapi上创建响应格式?
EN

Stack Overflow用户
提问于 2017-08-22 12:48:11
回答 3查看 744关注 0票数 1

如图所示,如何在ASP.net webapi上创建响应格式?

错误响应:

成功响应:

EN

回答 3

Stack Overflow用户

发布于 2017-08-22 14:09:55

首先创建DTO

代码语言:javascript
运行
复制
public class SuccessDTO
{
    public int success { get; set; }
    public string message { get; set; }
    public List<RoleDTO> data{ get; set; }
}
public class RoleDTO
{
   public string roles_name{ get; set; }
   public string description { get; set; }       
}
public class ErrorDTO
{
    public int success { get; set; }
    public ErrorCodeDTO error { get; set; }
}
public class ErrorCodeDTO
{
    public int code { get; set; }
    public string message { get; set; }
}

然后从web api返回对象。

代码语言:javascript
运行
复制
public IHttpActionResult GetSuccess()
{
    var success = new SuccessDTO 
    { 
        success = 1, 
        message = "Ok", 
        data = new List<RoleDTO>()
        { 
            new RoleDTO 
            { 
                roles_name = "Admin", 
                description = "admin" 
            }, 
            new RoleDTO 
            { 
                roles_name = "Administrator", 
                description = "Administrator" 
            } 
        } 
    };
    return Ok(success);
}

public IHttpActionResult GetError()
{
    var error = new ErrorDTO 
    { 
        success = 0, 
        error = new ErrorCodeDTO 
                {
                    code = 0,
                    message = "invalid username and password"
                }
    };
    return BadRequest(error);
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-22 12:58:41

这将以定义的格式返回数据。

//返回对象

代码语言:javascript
运行
复制
   public class ReturnThisOBJ
    {
        public string message { get; set; }
        public string success { get; set; }
        public List<yourClass> data{ get; set; }
    }
    public class yourClass
    {
       public string roles_name{ get; set; }
       public string description { get; set; }       
    }

JSON Serialization And Deserialization

票数 0
EN

Stack Overflow用户

发布于 2017-08-22 20:32:44

好吧,我只是在System.Web.OData中跟踪了它在PageResult中是如何完成的,以便返回他们想要的任何结果。

好了,给你。您需要编写这些类才能从任何方法返回。

代码语言:javascript
运行
复制
    public class error
    {
        public int code { get; set; }
        public string message { get; set; }
    }

    [DataContract]
    public abstract class MyResult
    {
        private string _message;
        private bool _success;
        private error _error;

        protected MyResult(bool success, string message)
        {
            this.success = success;
            if (this.success == true)
            {
                message = "OK";
            }
            this.message = message;
            if (this.success == false)
            {
                this.error = new error
                {
                    code = 0,
                    message = this.message
                };
            }

        }

        protected MyResult(bool success, error error)
        {
            this.success = success;
            if (this.success == true)
            {
                error = null;
                this.message = "OK";
            }
            this.error = error;
            if (this.success == false)
            {
                this.message = this.error.message;
            }
        }

        [DataMember]
        public bool success
        {
            get
            {
                return _success;
            }
            private set
            {
                _success = value;
            }
        }

        [DataMember]
        public string message
        {
            get
            {
                return _message;
            }
            set
            {
                _message = value;
            }
        }

        [DataMember]
        public error error
        {
            get
            {
                return _error;
            }
            set
            {
                _error = value;
            }
        }
    }

    [DataContract]
    [JsonObject]
    public class MyResult<T> : MyResult, IEnumerable<T>
    {
        public MyResult(IEnumerable<T> data, bool success = true, string message = "OK") : base(success, message)
        {
            this.data = data;
        }

        public MyResult(string errorMessage) : base(false, errorMessage) { }
        public MyResult(error error) : base(false, error) { }

        [DataMember]
        public IEnumerable<T> data { get; private set; }

        public IEnumerator<T> GetEnumerator()
        {
            return data.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return data.GetEnumerator();
        }
    }

MyResult是我们将从控制器返回的类。现在是数据类,你可以使用任何你想要的名字的类。

代码语言:javascript
运行
复制
    public class Data
    {
        public string role { get; set; }
        public int? id { get; set; }
    }

下面是我如何从我的控制器调用它

代码语言:javascript
运行
复制
    public class MyDataFormatController : ApiController
    {
        List<Data> data = new List<Data>();

        public MyResult<Data> Get()
        {
            data.Add(new Data { id = 1, role = "admin" });
            data.Add(new Data { id = 2, role = "manager" });
            data.Add(new Data { id = 3, role = "employee" });

            return new MyResult<Data>(data);
        }

        [Route("api/mydataformat/errormessage")]
        public MyResult<Data> GetError()
        {
            return new MyResult<Data>("No Data");
        }

        [Route("api/mydataformat/errorwithcode")]
        public MyResult<Data> GetErrorWithCode()
        {
            return new MyResult<Data>(new error { code = 101, message = "Invalid Data" });
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45809076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档