webapi学习

在MVC中使用WebApi,初始化的时候App_Start文件夹中已经默认生成路由信息,不需要在RouteConfig中添加。

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

Web API 框架默认是基于 Restful 架构模式的,与 ASP.NET MVC 有区别的是,它会根据 Http 请求的 HttpMethod(Get、Post、Put、Delete) 来在 Controller 中查找 Action,规则是:Action 名中是否以 Get、Post 开头?Action 上标记 HttpGet、HttpPost 等标记?并会完全忽视 Action 的方法名。所以我们一般在路由里面配置增加action的占位符{action},路由匹配规则和mvc一样。

action方法的常用特性有以下几种,如果标记了请求类型或者action名中以put、delete开头那么httpclient请求的类型也必须用put、delete,否则无法匹配;另外我们可以用标记特性的方式修改路由匹配action。

[System.Web.Mvc.HttpGet]
[System.Web.Mvc.HttpPost]
[System.Web.Mvc.HttpPut]
[System.Web.Mvc.HttpDelete]
[System.Web.Mvc.NonAction]
[System.Web.Mvc.ActionName("myActionName")]

       //查
        [System.Web.Mvc.HttpGet]
        public User GetByID(int id)
        {
            var user = _userList.FirstOrDefault(a => a.UserID == id);
            if (user == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return user;
        }

        //查
        public User GetByName(string id)
        {
            var user = _userList.FirstOrDefault(a => a.UserName == id);
            if (user == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return user;
        }

        //增
        public void Post([FromUri]User user)
        {

            if (user== null)
            {
                throw new HttpRequestException();
            }
            _userList.Add(user);
        }

        //改
        public void UpdateItem(int id,[FromUri]User user)
        {

        }

        //删除
        public void Delete(int id)
        {
            var user = _userList.FirstOrDefault(a => a.UserID == id);
            if (user == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            _userList.Remove(user);
        }
    }

因为路由最后一项是{id},所以普通参数也必须id,和mvc路由匹配方式一样。mvc支持强类型,WebApi也可以。还可以指定参数来自uri还是body。

[FromUri]表示请求参数在uri中

http://localhost:53263/api/user/post?UserID=1&UserName=asdad&UserEmail=asdad&id=1

[FromBody]表示参数在body中

    $.ajax({
                    url: "api/user/post",
                    type: "post",
                    data: {"UserID":1,"UserName":"asdas","UserEmail":"asdasd"},            datatype:"json",
                    success: function () {

                    }
                });
时间: 2024-10-07 14:07:25

webapi学习的相关文章

Asp.Net Core WebApi学习笔记(四)-- Middleware

Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Middleware功能支持. 在演示Middleware功能之前,先要了解一下Asp.Net管道模型发生了什么样的变化. 第一部分:管道模型 1. Asp.Net管道 在之前的Asp.Net里,主要的管道模型流程如下图所示: 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象

WebApi学习笔记01:webapi框架--控制器--路由

1.解决方案 1.1概述 一个解决方案里可以包含多个项目:也可以新建“解决方案文件夹”来逻辑(不是物理存在的文件夹)划分包含项目. 1.2创建方案 打开VS,文件->新建->项目: 2.Web项目 2.1概述 本例主要介绍安装WebApi框架,因为它几乎可以寄宿在任何项目中,先从空web模板项目,也不包含核心引用开始…… 2.1创建项目 在“解决方案资源管理器”中右键,添加->新建项目: 选择模板: 2.3安装webapi 在vs中,工具->NuGet程序包管理器->管理解决

WebAPI学习日记一:Ajax请求传递参数遇到的问题

首先,本人大学刚毕业,想把自己学习的一些东西记录下来,也是和大家分享,如有不对之处还请多加指正.声明:但凡是我博客里的文章均是本人实际操作遇到的例子,不会随便从网上拷贝或者转载,本着对自己和观众负责的态度. 什么是WebAPI?我的理解是WebAPI+JQuery(前端)基本上能完成Web MVC的功能,即:这么理解吧,WebAPI相当于Web MVC的后台部分. 接下来直接上例子吧,都是我在学习过程中遇到或者发现的一些问题.  一.创建WebAPI项目 (这个环节不是本章重点) 二.传递参数遇

WebAPi学习笔记之一 初识WebApi

公司这几天接了个APP项目,项目中要使用WebApi来作为服务端和客户端的数据交换层.于是我就被老板要求学习WebApi了. 对于ASP.Net相关知识为零的我来说,这无疑是一个难题.学习了这么久终于摸到了点门路.WebApi的定位很容易,它就是用来控制服务端和数据段数据转换的. WebApi包括控制器,路由,类model等几大内容: 类model:主要用来保存数据的. 控制器:主要用来根据客户端的method类型的响应, 路由:根据客户端的request URL来选择使用哪一个控制器,或者生成

WebApi学习笔记

1.与mvc区别:    (1)controller继承自ApiController        (2)action不返回视图而是返回数据    (3)访问:http://localhost:1671/api/products/(productscontroller) 2.浏览器访问结果区别    (1)火狐.谷歌返回xml     (2)IE返回json包     原因:出现这种差别的原因是IE和Firefox发送了不同的Accept报头,因此,Web API在响应中发送了不同的内容类型  

WebApi学习总结系列第二篇(webapi的调试)

目前使用webapi的调试主要有 1.用接口宿主调试.(宿主形式多样:web.winform.还有就是直接用app进行接口调试) 2.用Fiddler抓Http信息,进行调试. 1.用接口宿主调试. 在<ASP.NET Web API 2 框架揭秘>一书第一章就提到宿主的概念,宿主可以是web页面.winform等形式. 通过这些宿主,我们在后台设置断点对webapi进行调试.在mvc中创建的webapi宿主默认是web. 我们也可以直接用app,通过连接本地,设置断点.这个需要将webapi

WebApi学习笔记06:使用webapi模板--仓储模式--Unity依赖注入

1.Web项目 1.1概述 对数据操作封装使用存储模式是很常见的方式,而使用依赖注入来降低耦合度(方便创建对象,可以抛弃经典的工厂模式)…… 1.2创建项目 1.3添加模型 在Models下,添加Product.cs: namespace WebApi06.Models { public class Product { public int ID { get; set; } public string Name { get; set; } public decimal Price { get;

WebApi学习系列

  最近有一些时间,打算学习和整理一下Web API的一些学习资料的翻译工作.以下是对Web API 的大概目录的整理.欢迎更多的朋友一起加入到学习Web API 的队伍中来,如果你想贡献自己的,请联系QQ:546975675 目录 入门 路由 Web API如何与数据库交互 移动客户端访问Web API 在Web API中实现OData 序列化和模型绑定 异常处理 测试和调试 Web API之安全授权 如何托管 Web API Web API 高级主题 Web API 版本 附加资源 API参

WebApi学习笔记02:使用webapi核心文件模板

1.Web项目 1.1概述 本例依然先从空web模板项目,但包含核心引用,这样模板帮我们创建好主要文件夹和路由默认配置…… 1.2创建项目 注意勾选“Web API”,和上一章的例子唯一的区别. 看一下自动生成的文件目录: 1.3添加控制器 在Controllers文件下,添加HelloWorldController.cs类,其代码: using System.Web.Http; namespace WebApi02.Controllers { public class HelloWorldCo

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)

本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运行. 第一部分.自托管 一.依赖.Net Core环境 修改 project.json 文件内容,增加发布时需要包含文件的配置内容 1 { 2 "version": "1.0.0-*", 3 "testRunner": "xunit&quo