【C#】MVC调用WebApi的Demo

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

MVC调用WebApi的Demo


目的

通过MVC项目调用写好的Api,完成数据库增删改查操作

WebApi项目

链接:https://blog.csdn.net/unclebober/article/details/86649800

MVC调用WebApi


项目代码:https://blog.csdn.net/unclebober/article/details/86674098

遇到的问题

1.如何将请求的数据以JSON格式返回

当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON格式予以响应,而这可以通过JsonResult来解决。

参考链接:https://www.cnblogs.com/zkwarrior/p/4734684.html
// GET api/values
        /// <summary>
        /// 客户端调用某个Action方法并希望以JSON的格式返回请求的数据,使用JsonResult
        /// </summary>
        /// <returns></returns>
        public /*string*/JsonResult<List<User>> GetAll()
        {
            List<User> userInfoList = new List<User>();
            SqlConnection conn = new SqlConnection(constr);
            string text = "userinfo_get";
            conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(text, conn);
            DataSet ds = new DataSet("Students");
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            foreach (DataRow row in dt.Rows)
            {
                User user = new Models.User();
                user.Id = Convert.ToInt16(row["Id"]);
                user.Name = Convert.ToString(row["Name"]);
                user.Sex = Convert.ToString(row["Sex"]);
                user.Age = Convert.ToInt16(row["Age"]);

                userInfoList.Add(user);
            }
            conn.Close();
            return Json<List<User>>(userInfoList);
            ///xml不可行
            //XmlSerializer serializer = new XmlSerializer(typeof(List<User>));
            //return serializer.Serialize(userInfoList);
            
            //return JsonConvert.SerializeObject(userInfoList);
        }

2.Post请求需要在传参时加上[FromBody]

另外我们可以注意到在Post Put的方法参数有一个关键字[ FromBody ],而Get、Delete则没有。,事实上没有加[ FromBody ]就默认为[ FromUri ].

3.使用HttpClientExtensions方法[PostAsJsonAsync(HttpClient, String, T)]

使用前需要安装Microsoft.AspNet.WebApi.Client扩展

4.Delete操作报错

在这里插入图片描述

代码:

[HttpPost]
public async Task<ActionResult> DelInfo1(int id)
{
    client.BaseAddress = new Uri("http://10.194.46.143:5533/api/values/delete");
    //var respones = await client.GetStringAsync(client.BaseAddress);
    //HttpContent content = new HttpContent()
    var response = await client.PostAsJsonAsync(client.BaseAddress,id);
    return View();
}

解决措施:删除[HttpPost]即可

5.Add,Update,Delete等Post请求的参数传递

由于Post请求不能通过地址栏来传递参数,所以需要在方法中加上[FromBody]。而FromBody只能传递一个参数,因此定义一个类(包含四个属性Id,Name,Sex,Age),通过传递类,将四个参数传过来。

public async Task<ActionResult> UpdateInfo1(int id,string UserName,string UserSex,int UserAge)
        {
            client.BaseAddress = new Uri("http://10.194.46.143:5533/api/values/update");
            Para para = new Para
            {
                Id = id,
                Name = UserName,
                Sex = UserSex,
                Age = UserAge

            };
            //将Post请求发送给指定URI
            var response = await client.PostAsJsonAsync(client.BaseAddress,para);
            return View();
        }

对应api

 		[HttpPost]
        // PUT api/values/5
        public void Update([FromBody]Para para)
        {
            SqlConnection conn = new SqlConnection(constr);
            string text = "userinfo_update";
            SqlParameter[] updatepara =
            {
                new SqlParameter("@id",para.Id),
                new SqlParameter("@name",para.Name),
                new SqlParameter("@sex",para.Sex),
                new SqlParameter("@age",para.Age)
            };
            SqlCommand cmd = new SqlCommand(text, conn);
            cmd.CommandType = CommandType.StoredProcedure;
            foreach (SqlParameter parameter in updatepara)
            {
                if (parameter != null)
                    cmd.Parameters.Add(parameter);
                else
                    continue;
            }
            conn.Open();    //Open the sql
            cmd.ExecuteNonQuery();
            conn.Close();
        }

6.HttpClient.PostAsJsonAsync 方法无法调用

需要安装Microsoft.AspNet.WebApi.Client扩展

7.[HttpGet],[HttpPost]等标签的使用

先看一段代码
在这里插入图片描述
从上面的例子可以看出在Action中没有使用[HttpGet]、[HttpPost] 等修饰,这是什么情况呢?

Action 皆以HTTP 动词开头Get、Post、Put、Delete ,这个也是刚好符合 webapi的约定的,什么约定呢?

你调用什么类型的方法 ,例如 post 方法,那么他就去 你的所有的 action 里面 去找 以 post 开头的方法 ,名字可以随便叫,例如 postToDataBase 等等,只要开头匹配 就可以了

打个比喻,假设今天服务端收到了一个GET 请求时,会去查找对应的Controller 并且Action 以"Get…" 开头的方法,举个例子:GetMembers、GetTime,以此类推,如果我们从jQuery Ajax 发出了一个POST 请求,也会自动对应到以"Post…" 开头的Action 内,也就是说实际呼叫哪个Controller 的Action 不是利用网址来决定,而是依照HTTP 所送出的请求来决定,这也就是非常典型的REST风格,而在Web API 中也处理了回传的数据,让我们看看Get() 这个方法,回传IEnumerable 的方法,等于我们拥有了强类型。
如果说我们使用的方法名称不是 Get/Post/Put/Delete 的规则时,那么我们就一定要宣告它的接受动词 (Accept Verb),所以我们可以

修改如下代码:
在这里插入图片描述

c#webapi服务端项目代码 webapi接口服务demo以及调试全流程 阅读详情

相关推荐

C# WebAPI创建及具体实现

Web API的介绍 Web API 其实就是应用程序编程接口,在实际的生活中,我们使用的软件有很多都是从API中获取的数据,比如:天气预报,微信支付等都是使用的接口,这样我们在编程过程中就可以使用别人已经写好的接口,可以省很多时间和精力,当然一些我们自己使用的,就需要我们自己去编写了,下面介绍用C#API接口的具体实现方法。 Web API项目在VS2015中的创建 新建ASP.NET Web...

FenfsfDensting的博客 2万+

C# WebApi实战项目Demo,便于快速学习WEBAPI

C# WebApi实战项目Demo,便于快速学习WEBAPI, WebAPI: 提供给不同客户端(跨平台客户端)调用网页的应用程序编程接口。 Web API,一般指基于HTTP协议的编程接口,接口一般定义为HTTP或HTTPS:请求方法、请求路径、参数、响应数据格式、响应HTTP Code等。至于HTTP Server,可以用Java、.Net、Nodejs等各种框架实现,Http Server属于Web API的实现,有时候也会指Web Service接口(目前越来越少见)。 接口方法: // GET api/Movies/5 public Movie GetMovie(Int32 id) { Movie movie = db.Movies.Find(id); if (movie == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusC

服务器和网页接口,WebApi架构详解,WebApi接口搭建与部署WebApi服务器

WebApi架构详解,WebApi接口搭建与部署WebApi服务器本文关键词:WebApi架构, WebApi接口搭建, WebApi部署1. Api是什么?API(Application Programming Interface,应用程序编程接口)是一些预先定义的接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。操作系统想...

weixin_39886024的博客 2637

WebAPIDemo.rar_c# web api

今天的web计算平台包含了广泛的功能,其中的大部分均可以通过API(应用程序编程接口)访问。 WEBAPIDemo

C# .NET Web API 完整 Demo

麻雀虽小,五脏俱全,这是一个可直接用于生产的脚手架 包含: DBHelper:数据库操作类,使用原生SQL,查询结果映射到Model,操作数据库非常方便,支持异步,提供了Emit版本的属性赋值比反射性能高,但暂未使用,支持MySQL、Oracle、SQL Server、SQLite、Access Model生成器:用于生成和数据库表与字段一一对应的Model类,支持MySQL、Oracle、SQL Server、SQLite Token验证 在拦截器里统一处理异常 在拦截器里统一写操作日志 集成了kafka,但只写了生产者,消费者没写 集成了自己写的Socket工具类,业务耦合较重,可以自己改

C# webapi接口调用实例

书接上回,在demo的基础上进行webapi接口调用实例开发。

荆棘的博客 1万+

c# MVC完整项目 EF连接数据库 webapi

c# MVC完整项目 EF连接数据库 webapi下载 正在上传…重新上传取消​weixin_398208352020-06-30 02:30:24 自己写的一个MVC项目,用EF连接数据库,前端调用webapi实现各种操作,对初学者会是很好的DEMO,里面有新增修改删除的完整功能 相关下载链接://download.csdn.net/download/yanshihuo/10977337?utm_source=bbsseo ...

fangyuan621的专栏 391

MVCWebAPI调用、授权)

本系列目录:ASP.NET MVC4入门到精通系列目录汇总 微软有了Webservice和WCF,为什么还要有WebAPI? 用过WCF的人应该都清楚,面对那一大堆复杂的配置文件,有时候一出问题,真的会叫人抓狂。而且供不同的客户端调用不是很方便。不得不承认WCF的功能确实非常强大,可是有时候我们通常不需要那么复杂的功能,只需要简单的仅通过使用Http或Https来调用的增删改查功能,这时,WebAPI应运而生。那么什么时候考虑使用WebAPI呢? 当你遇到以下这些情况的时候,就可以考虑使用Web AP

fangyuan621的专栏 1994

20、ASP.NET MVC入门到精通——WebAPI

简介: 本系列目录:ASP.NET MVC4入门到精通系列目录汇总 微软有了Webservice和WCF,为什么还要有WebAPI? 用过WCF的人应该都清楚,面对那一大堆复杂的配置文件,有时候一出问题,真的会叫人抓狂。而且供不同的客户端调用不是很方便。不得不承认WCF的功能确实非常强大,可是有时候我们通常不需要那么复杂的功能,只需要简单的仅通过使用Http或Https来调用的增删改查功能,这时,WebAPI应运而生。那么什么时候考虑使用WebAPI呢? 当你遇到以下这些情况的时候,就可以考虑使

fangyuan621的专栏 786

WebApi搭建简单服务器demo亲测可用

WebApi搭建简单服务器 直接用vs打开就可以用 使用c#搭建的简易服务器

C#职场最精髓Webapi实例(Demo含源码,前后端分离,终身受益).rar

此项目是C#语言编写,以最真实职场做项目的技术,WebAPI特性路由+前后端调用分离技术,非常适用于刚入行IT的新人和不懂Web api的朋友们,直接可用,现成项目,UI+DAL间隔分明,数据网格自动获取配置文件动态加载显示数据,贱卖技术,学成后必能在职场收入上增加资源成本的几十倍收益,终身受益。

WebApi,不包含MVC Demo

1、创建项目 只是单纯的使用Web API的功能,而不需要使用的MVC,这个时候就该抛开MVC来新建项目了。 首先,新建一个Asp.Net空应用程序,在程序集中添加引用System.Web.Http和System.Web.Http.WebHost。 2、添加引用 继续添加System.Net.Http 另外还需要引用Json.Net,可以通过Nuget或者直接用下载好的dll 3、...

dlfryby306482969的博客 297

c# autofac结合WebApi的使用

c# autofac结合WebApi的使用 原文:c# autofac结合WebApi的使用一、下载相关类库引用   install-packageAutofac   install-packageAutofac.Mvc4   install-packageAutofac.WebApi2 二、配置autofac pu...

weixin_30876945的博客 241

C# 简单的webapi

最近在看一个C#的项目。之前对C#一点儿不了解 ,谁让我对C++情有独钟。。。 简单流程有必要了解一下,这里写一个基于MVC的简单API项目,支持http post请求并响应。这只是个人入门程序。下面的实例参考另外一个blog的demo,自己又重新实现了一遍https://blog.csdn.net/lwpoor123/article/details/78285148。 最后需要测试post ...

moyebaobei1的博客 4356

WebApi MD5 加密(JS + MVC 4)

WebApi 加密过程,用到了加密字符串和所有数据的加密,这样保证了传输的安全性,如果增加了timestr时间戳,保证了传输过程中数据的安全性。

静哥亻门 3891

微信移动支付V3开发详细教程服务端采用.net mvc webapiC#

注本教程不对微信支付申请,移动开发配置做解释。技术支持QQ:806693619 最近开发手机app需要实现移动支付功能,由于考虑支付安全将微信支付生成签名写到了服务器端,官网给的demo是在客户端的,纠结了几天终于实现了。 开发思路:下载微信移动支付demo,根据demo的代码重新写服务器端,然后将生成的签名信息替换demo里面参数测试服务器端的代码是否成功,然后在写服务器端的返回成功

kewangqiangli000的专栏 2960
上一篇: 【C#】WebApi项目代码
下一篇: hexo+github搭建个人博客
iam_Cheng
博客等级 码龄9年 41粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值