WebApi通过后端调用传递基础类型的参数

WebApi传递实体类型的参数,可以直接将实体序列化,然后写入请求流即可。
传递基础类型的参数却不这么方便。以下是自己踩过的坑,分享出来给大家。调用的方式是通过后端,前端的没有总结。
WebApi后端代码:

public class UsersController : ApiController
    {
        private List<Users> _userList = new List<Users>() {
            new Users{ UserID=1, UserName="冯宝宝", UserEmail="[email protected]"},
            new Users{ UserID=2, UserName="王也", UserEmail="[email protected]"}
        };

        [HttpPost]
        public IEnumerable<Users> WithStringParam([FromBody]string name)
        {
            return _userList;
        }
        [HttpPost]
        public IEnumerable<Users> WithIntParam([FromBody]int id)
        {
            return _userList;
        }
        [HttpPost]
        public IEnumerable<Users> Post(Users user)
        {
            return _userList;
        }
        [HttpGet]
        public IEnumerable<Users> YieldGet()
        {
            foreach (var item in _userList)
            {
                yield return item;
            }
        }
    }

    public class Users
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public string UserEmail { get; set; }
    }
}

后端调用的代码:

{
                //dynamic val = new { UserID = "1", UserName = "冯宝宝", UserEmail = "[email protected]" };
                //HttpWebRequest httpWebRequest = HttpWebRequest.Create("http://localhost:51151/Api/Users/WithStringParam") as HttpWebRequest;
                HttpWebRequest httpWebRequest = HttpWebRequest.Create("http://localhost:51151/Api/Users/WithIntParam") as HttpWebRequest;
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";

                {
                    //string strJson = JsonConvert.SerializeObject(val);
                    //byte[] data = Encoding.UTF8.GetBytes(strJson);

                    //dynamic strVal = new { name = "aaa" };
                    //string strJson = JsonConvert.SerializeObject(strVal);
                }
                //byte[] data = Encoding.UTF8.GetBytes($"\"冯宝宝\"");//string参数
                byte[] data = Encoding.UTF8.GetBytes($"12");//int参数

                Stream requestStream = httpWebRequest.GetRequestStream();
                requestStream.Write(data, 0, data.Length);
                requestStream.Close();

                try
                {
                    using (var res = httpWebRequest.GetResponse() as HttpWebResponse)
                    {
                        if (res.StatusCode == HttpStatusCode.OK)
                        {
                            StreamReader streamReader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                            string result = streamReader.ReadToEnd();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }

原文地址:http://blog.51cto.com/3544640/2149320

时间: 2024-10-01 06:57:26

WebApi通过后端调用传递基础类型的参数的相关文章

使用swagger传递map类型的参数报错406

1.前言 最近在实现一个分页查询所有的用户及其角色的功能时,遇到了406的问题,费了好长时间才解决,记录一下解决方法. 2.排错过程 前后端分离的项目,写接口的时候我用到了swagger框架.先说下406是什么意思? 406:请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体.实体格式由Content-Type头定义的媒体类型决定 解释一下:返回的消息头浏览器无法解释,下面是两种不同的消息头: 3.解决方法 导入下面三个jar包? <!-- https://mvnrepositor

帆软报表和jeecg的进一步整合--ajax给后台传递map类型的参数

下面是页面代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="/context/mytags.jsp"%> <% String deptIds = (String)request.getAttribute("departIds

工作积累(九)——前后台传递类Map型参数

最近在工作中整合友盟消息推送服务时,遇到了用 Ajax 向 Java 后台传递自定义参数的需求,当时想要采取 java.util.Map ,但发现 Ajax 无法传递 java.util.Map 类型的参数,后来无奈采取的方式的是采用了这样的 Vo 对象: public ExtraVo {   private List<String> keys;   private List<String> values;   //省略 get | set 方法 } 取值时: if(extraVo

WebAPI请求——js调用

继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用jQuery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中的GetU

Typescript学习笔记(一)基础类型

为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑).对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼.部分特性同es6(个人对es6还是蛮有好感的).ts同期的coffeescript,将js python化,ts也把js搞的向其他语言靠拢.. 中文学习,这里是英文学习.如果不想看这些东西,那看我笔记学吧.哈哈. ts的基础类型,布尔值,数字,字符串,数组,元组(Tuple),枚举,任意值,空值.后

玩转JavaScript OOP[0]&mdash;&mdash;基础类型

前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统的. 编程语言和技术的结合使用,就像一个男人娶了好几个妞一样.在旧的时代,.NET是大房,JavaScript是偏房.大房是"后宫之主",不仅要操持家业,还能给你生娃,娃将来也要继承家业的.偏房就没那么幸运了,在"后宫"没什么地位,虽然衣食无忧,但不能管理家族事务,生的

Android java传递string类型数据给C

本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法,具体意义后面的文章将介绍 /** * 把一个jstring转换成一个c语言的char* 类型. */ char* _JString2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindCla

自学HIBERNATE5.0文档第一季之基础类型篇

2.3. Basic Types Basic value types usually map a single database column, to a single, non-aggregated Java type. Hibernate provides a number of built-in basic types, which follow the natural mappings recommended by the JDBC specifications. Internally

Android事件分发详解(四)——事件传递基础示例

MainActivity如下: package com.cn; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; /** * Demo描述: * Andr