关于Web API的个人理解

Web Api的调用主要有四种, Get(获取)、Post(新增)、Delete(删除)、Put(更新)

路由定义常用的两种方式

方法1

1               config.Routes.MapHttpRoute(
2                 name: "DefaultApi",
3                 routeTemplate: "api/{controller}/{id}",
4                 defaults: new { id = RouteParameter.Optional });

方法2

1           config.Routes.MapHttpRoute(
2                name: "DefaultApi2",
3                routeTemplate: "api/{controller}/{action}/{id}",
4                defaults: new { id = RouteParameter.Optional });

以如下函数为例

1

 1  public Model GetModel(int id)
 2         {
 3 
 4             var model = _modelRepository.GetItem(id);
 5             if (model == null)
 6             {
 7                 throw new HttpResponseException(HttpStatusCode.NotFound);
 8             }
 9             return model;
10         }

2

 1  public IEnumerable<Model> GetModels()
 2         {
 3             var models= _modelRepository.GetAll().ToList();
 4             var functions = _functionRepository.GetAll().ToList();
 5             foreach (var model in models)
 6             {
 7                 model.Functions = functions.Where(f => f.SubModelID == model.ModelID);
 8             }
 9             return models;
10         }

3

   public IEnumerable<Model> GetModels(int asd,int mmm)
        {
        
            return _modelRepository.GetAll().Where(c => c.ModelID == asd).ToList();
        }

方法1 函数1 : http://localhost:18264/api/Model/2

        函数2 : http://localhost:18264/api/Model/

        函数3 : http://localhost:18264/api/Model?asd=2&mmm=3(这里是有多个参数的情况)

方法2 函数1 : http://localhost:18264/api/Model/GetItem/2

        函数2 : http://localhost:18264/api/Model/GetModels

        函数3 : http://localhost:18264/api/Model/GetModels?asd=2&mmm=3(这里是有多个参数的情况)

个人补充

1.注意 id = RouteParameter.Optional 设置默认值的时候我们没有给ID设置因此 函数2才能找到无参数的GetModels方法 如果设置id默认值为2 那么http://localhost:18264/api/Model/ 就会定位到model2

2.Action代表着方法名,id代表着参数名,为什么会有方法2,在方法1没有不足以满足需求的时候可以考虑方法2,比如函数名不一样,但是参数一样 HTTP请求都是Get 需要采用方法2进行路由定义

3.注册过程

一 注册

1   config.Routes.MapHttpRoute(
2                 name: "DefaultApi",
3                 routeTemplate: "api/{controller}/{id}",
4                 defaults: new { id = RouteParameter.Optional });

二 建立Controller

 1 public class ModelController:ApiController 2 { 3 } 

三 建立参数仓库

 1 public class FunctionRepository:IRepository<Function> 

即可

原文地址:https://www.cnblogs.com/guofu/p/5268653.html