WebApi創建使用

API(Application Programming Interface,应用程序编程接口)是一些预先定义的接口,说的更加通俗一点,别人写好的代码,或者编译好的程序,提供给你使用, 就叫做API。

一.基本的创建使用过程,实例如下:
1
在这里插入图片描述
2勾选Web Api,模板选择空
在这里插入图片描述
3在Models文件夹里添加一个模型类,并命名为Product,并在类中添加以下代码
在这里插入图片描述

namespace WebApplication1.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}

4在Controllers文件夹里添加一个控制器,将其命名ProductsController,并添加以下代码在这里插入图片描述

using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class ProductsController : ApiController
    {
        Product[] products = new Product[]
        {
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
        };

        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }

        public IHttpActionResult GetProduct(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
        [HttpPost]
        public Product GetProduct2(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return null;
            }
            return product;
        }      
    }
}

5运行程序,在IE url栏中输入
http://localhost:58984/api/Products就可以调用action(即public方法)----GetAllProducts()
在这里插入图片描述
在这里插入图片描述
根据此处Products.json可知道返回的是json数据.

二.值得注意的点.
1.在文件夹App_Start有文件WebApiConfig.cs内容如下(看注释)

        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();//[HttpGet]\[HttpPost]等特性映射

            config.Routes.MapHttpRoute(
                name: "DefaultApi", //Web Api就是根据routeTemplate的路径来调用的
                routeTemplate: "api/{controller}/{id}",//controller代表控制器名字,即Products; id是可选参数. 
                defaults: new { id = RouteParameter.Optional }
            );
        }

2.可以在上面的routeTemplate里添加一个{action}来指定调用方法的名字:

        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi", 
                routeTemplate: "api/{controller}/{action}/{id}",//action就是方法的意思
                defaults: new { id = RouteParameter.Optional }
            );
        }

此时调用方法GetAllProducts()就需要URL這樣寫:http://localhost:58984/api/Products/GetAllProducts
调用GetProduct()方法的url:
http://localhost:58984/api/Products/GetProduct?id=1
但是,输入http://localhost:58984/api/Products/GetProduct2?id=1是不可以调用GetProduct2()方法的,这是因为url调用的都是HttpGet,而GetProduct2()是HttpPost

3.public方法的名字(也就是action的名字),是以"Get", “Post”, “Put”, “Delete”, “Head”, “Options”, 或 "Patch"开头,那么按照约定,该方法(action)匹配对应的http请求方法的调用。如果开头没有上述的关键字,默认表示该方法只支持Post。最常见的就是get和post,get的话,就是将参数放到url上去提交,post的话,参数不会显示在url中。(post\delete\put\get 对应增删改查)可以在方法上面添加特性[HttpGet][HttpPost]等表明请求的类型,如在web api里的一个方法.

        [HttpPost]
        public Product GetProduct2(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return null;
            }
            return product;
        }

三.在PostMan中进行调用
在postman中进行调用需要注意:
b.用PostMan调用时一定要发布WebApi,用发布的服务器地址(这是我将WebApplication1站点发布到IIS上的url: http://10.167.66.6:8033/)进行调用,用本地运行的地址(本地运行的url http://localhost:58984/)调用不行
这一句说的是有问题的,本地运行的也可以调用,只是需要对postman作如下设置,就可以进行正常调用
在这里插入图片描述
在这里插入图片描述

c.在web api的[HttpPost]方法
中,只能用Params+key/value,用Post+body+raw+json是不行的;这一点与web service相反,在web service中只能用Post+body+raw+json才可以,用Params+key/value是不可以的.

这一句也是有问题的,当web api接口是从body中传值时用Post+body+raw+json方式,从头部传值时
用Params+key/value
在这里插入图片描述

实例:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值