带有 Json 参数的 Rest API 获取请求

Posted

技术标签:

【中文标题】带有 Json 参数的 Rest API 获取请求【英文标题】:Rest API Get request with Json parameter 【发布时间】:2019-12-01 01:30:33 【问题描述】:

我有一个任务,我需要使用 complex type 参数请求 web api GET 请求,我想我们无法执行 GET 请求之类的事情期望通过 URL 共享所有内容。

任何人都可以帮助我如何实现这一目标。通过 C# 使用带有 JSON 数据的 Web API GET 请求。

消费者控制台:

class Program
    
        static void Main(string[] args)
        
            try
            
                // Need to pass this through GET Request
                var employee = new Employee()  EmployeeId = 1, EmployeeName = "Test", Designation = "Developer", Salary = 100 ;
                var jsonParam = JsonConvert.SerializeObject(employee);
                //


                var request = (HttpWebRequest)WebRequest.Create("http://localhost:52237/Values/GetEmp");                

                var encoding = new UTF8Encoding();
                var bytes = encoding.GetBytes(jsonParam);

                request.Method = "GET";
                request.ContentLength = bytes.Length;
                request.ContentType = "application/json";

                using (var writeStream = request.GetRequestStream())
                
                    writeStream.Write(bytes, 0, bytes.Length);
                

                using (var response = (HttpWebResponse)request.GetResponse())
                
                    var responseValue = string.Empty;

                    if (response.StatusCode == HttpStatusCode.OK)
                    
                        // grab the response
                        using (var responseStream = response.GetResponseStream())
                        
                            if (responseStream != null)
                                using (var reader = new StreamReader(responseStream))
                                
                                    responseValue = reader.ReadToEnd();
                                
                        
                    
                              
            
            catch (Exception ex)
            
                Console.WriteLine(ex.Message);
            
        
    
    public class Employee
    
        public int EmployeeId  get; set; 
        public string EmployeeName  get; set; 
        public int Salary  get; set; 
        public string Designation  get; set; 
    

网络 API:

public class ValuesController : ApiController
            
        [HttpGet]
        [Route("api/GetEmp")]
        public Employee GetEmp([FromUri]Employee employee)
        
            // Getting employee object from client

            // Yet to implement

            if (employee != null)
            
                employee.Designation = "Engineer";
            
            return employee;
        
    

    public class Employee
    
        public int EmployeeId  get; set; 
        public string EmployeeName  get; set; 
        public int Salary  get; set; 
        public string Designation  get; set; 
    

提前致谢。

【问题讨论】:

这些链接可能对您有所帮助 ***.com/questions/29571284/… 和 ***.com/questions/50850318/… 添加您有问题的复杂类型或样本请求格式 @MdFaridUddinKiron 用我尝试过的代码更新了我的问题 附注 1:GET 参数中的复杂类型总是是个坏主意和架构错误。旁注 2:MS recomends 使用 HttpClient 而不是 WebRequest 你想请求相同的格式还是我会定制它 【参考方案1】:

我认为在 HTTP 1.1 版本之后,您还可以在 GET 请求中发送正文中的数据。因此,您可以使用 [FromBody] 而不是 [FromUri]。

    [HttpGet]
    [Route("api/GetEmp")]
    public Employee GetEmp([FromBody]Employee employee)
    
        // Getting employee object from client

        // Yet to implement

        if (employee != null)
        
            employee.Designation = "Engineer";
        
        return employee;
    

【讨论】:

你能分享一下如何通过控制台应用程序使用这个

以上是关于带有 Json 参数的 Rest API 获取请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务

使用 PHP cURL 通过 REST API 获取 JSON

如何在 Spring REST 控制器中获取原始 JSON 正文?

Windows Mobile 中用于 REST API 的请求参数

如何使用 Angular 发送带有对象参数的 fetch api 请求?

将 REST API 获取请求转换为 GraphQL