1、创建项目

只是单纯的使用Web API的功能,而不需要使用的MVC,这个时候就该抛开MVC来新建项目了。

首先,新建一个Asp.Net空应用程序,在程序集中添加引用System.Web.Http和System.Web.Http.WebHost。

2、添加引用

继续添加System.Net.Http

另外还需要引用Json.Net,可以通过Nuget或者直接用下载好的dll

3、添加路由映射

添加路由映射,创建App_Start文件夹,新建WebApiConfig.cs文件,添加如下路由配置:

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

4、配置Global文件

新建Global.acax文件,在Application_Start中调用完成注册

namespace WebAPIDemo2
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
WebApiConfig.Register(GlobalConfiguration.Configuration);
}
}
}

5、创建控制器

创建WebAPI控制器

在项目中添加Model到Models文件夹当中

BookChapter.cs

namespace WebAPIDemo2.Models
{
public class BookChapter
{
///
/// 数量
///
public int Number { get; set; }
///
/// 标题
///
public string Title { get; set; }
///
/// 页数
///
public int Pages { get; set; }
}
}
Book.cs
using System.Collections.Generic;
using System.Linq;
namespace WebAPIDemo2.Models
{
public class Book
{
public Book(int id, string title, params BookChapter[] chapters)
{
this.Id = id;
this.Title = title;
this.BookChapters = chapters.ToList();
}
public int Id { get; private set; }
public string Title { get; private set; }
public ICollection BookChapters { get; private set; }
}
}

在项目中新建控制器

BookChaptersController.cs
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using WebAPIDemo2.Models; namespace WebAPIDemo2.Controllers
{
public class BookChaptersController : ApiController
{
// GET api/bookchapters
[HttpGet]
public IEnumerable Get()
{
return chapters;
} // GET api/bookchapters/5
public BookChapter Get(int id)
{
return chapters.Where(c => c.Number == id).SingleOrDefault();
} // POST api/bookchapters
[AcceptVerbs("POST")]
[ActionName("bookchapter")]
public void PostBookChapter([FromBody]BookChapter value)
{
chapters.Add(value);
} // PUT api/bookchapters/5
public void PutBookChapter(int id, [FromBody]BookChapter value)
{
chapters.Remove(chapters.Where(c => c.Number == id).Single());
chapters.Add(value);
} // DELETE api/bookchapters/5
public void DeleteBookChapter(int id)
{
chapters.Remove(chapters.Where(c => c.Number == id).Single());
} private static List chapters; static BookChaptersController()
{
chapters = new List()
{
new BookChapter{Number=1,Title=".Net Architecture",Pages=20},
new BookChapter{Number=2,Title=".Net ",Pages=120},
new BookChapter{Number=3,Title=".Net a",Pages=480},
new BookChapter{Number=4,Title=".Net b",Pages=200},
new BookChapter{Number=5,Title=".Net c",Pages=210},
new BookChapter{Number=17,Title=".Net d",Pages=230},
new BookChapter{Number=42,Title=".Net e",Pages=270},
new BookChapter{Number=43,Title=".Net f",Pages=320},
new BookChapter{Number=50,Title=".Net g",Pages=520}
};
}
}
}
BookChaptersAttrController.cs
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using WebAPIDemo2.Models; namespace WebAPIDemo2.Controllers
{
//添加路由前缀
[RoutePrefix("booksamples")]
public class BookChaptersAttrController : ApiController
{
private static List chapters;
private static List books; static BookChaptersAttrController()
{
chapters = new List
{
new BookChapter{Number=1,Title=".Net Architecture",Pages=20},
new BookChapter{Number=2,Title=".Net ",Pages=120},
new BookChapter{Number=3,Title=".Net a",Pages=480},
new BookChapter{Number=4,Title=".Net b",Pages=200},
new BookChapter{Number=5,Title=".Net c",Pages=210},
new BookChapter{Number=17,Title=".Net d",Pages=230},
new BookChapter{Number=42,Title=".Net e",Pages=270},
new BookChapter{Number=43,Title=".Net f",Pages=320},
new BookChapter{Number=50,Title=".Net g",Pages=520}
};
books = new List()
{
new Book(1, "Professional C#", chapters.ToArray()),
new Book(2, "Professional Asp.Net MVC 4")
};
}
//单参数路由
[Route("books/{bookId}")]//URL:http://server/books/2
public IEnumerable GetBookChapters(int bookId)
{
return books.Where(b => b.Id == bookId).Single().BookChapters;
} //多参数路由
[Route("books/{bookId}/chapters/{chapterId}")]//URL:http://server/books/2/chapters/17
//类型限制参数
//[Route("books/{bookId:int}/chapters/{chapterId:int}")]
public BookChapter GetBookChapter(int bookId, int chapterId)
{
return
books.Single(b => b.Id == bookId)
.BookChapters.SingleOrDefault(c => c.Number == chapterId);
}
}
}

6、项目结构如下:

纯WebApi,不包含MVC Demo的更多相关文章

  1. 如何在一个项目中同时包含mvc建站、webapi接口

    项目做得多了..就会发现有些小项目不想建太多的项目..现在思明在这里和大家分享一下如果再一个项目中同时包含mvc建站以及实现webapi接口 1.新建项目 aps.net web 应用程序 2 新建模 ...

  2. indexedDB bootstrap angularjs 前端 MVC Demo

    前端之MVC应用 1.indexedDB(Model): 数据层,前端浏览器 HTML5 API 面向对象数据库,一般现在用的数据库都是关系型数据库. 那么indexeddb有什么特点呢: 首先,从字 ...

  3. bootstrapValidator 使用(包含入门demo,常用方法,以及常用的规则)

    一   什么是bootstrapValidator?    -- 一个基于 jquery,boostrap 的表单验证框架....简单实用上手快,页面美观还过得去,不废话了,直接撸. 二  boots ...

  4. (MVC — — Demo)客户管理系统的开发日志

    点击一下 目录 第一步:搭建开发环境 第二步:层次包(按照三层架构思想写) 第四步:开发(utils)工具包 第四步:开发 Dao 层 第五步:开发 services 层 第六步:开发 factory ...

  5. ajax 跨域webapi 最简单的demo(只介绍Get)

    这几天遇到一个nodejs的项目,使用VSCode开发,需要连接数据库的,但是用nodejs连接数据库比较繁琐,需要安装很多东西,本人也懒得去研究了.后来想到建一个WebAPI然后用ajax来调用,避 ...

  6. Mvc 自带分页控件PagedList.Mvc Demo示例

    添加/下载PagedList.Mvc 直接搜索mvc pagelist 就会出来.安装完成即可.在项目的packages文件夹下面就会出现PagedList.Mvc.4.5.0.0 和PagedLis ...

  7. WebApi增删改查Demo

    1.新建webapi项目 2.配置WebApiConfig public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; p ...

  8. 《Head First Servlets & JSP》-3-1st servlet MVC demo

    项目结构 用户首页 form.html <html> <body> <h1 align='center'>Beer Selection Page</h1> ...

  9. 初学者配置第一个spring mvc Demo

    1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...

随机推荐

  1. 【社工】NodeJS 应用仓库钓鱼

    前言 城堡总是从内部攻破的.再强大的系统,也得通过人来控制.如果将入侵直接从人这个环节发起,那么再坚固的防线,也都成为摆设. 下面分享一个例子,利用应用仓库,渗透到开发人员的系统中. 应用仓库 应用仓 ...

  2. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  3. 比Mysqli操作数据库更简便的方式 。PDO

    下面来说一下PDO 先画一张图来了解一下 mysqli是针对mysql这个数据库扩展的一个类 PDO是为了能访问更多数据库 如果出现程序需要访问其他数据库的话就可以用PDO来做 PDO数据访问抽象层1 ...

  4. 微软新神器-Power BI横空出世,一个简单易用,还用得起的BI产品,你还在等什么???

    在当前互联网,由于大数据研究热潮,以及数据挖掘,机器学习等技术的改进,各种数据可视化图表层出不穷,如何让大数据生动呈现,也成了一个具有挑战性的可能,随之也出现了大量的商业化软件.今天就给大家介绍一款逆 ...

  5. Android 7.1 - App Shortcuts

    Android 7.1 - App Shortcuts 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Shortcuts 文中如有纰漏,欢迎大家留言 ...

  6. 实现一个类 RequireJS 的模块加载器 (二)

    2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...

  7. JavaScript中事件处理

    先看看下面一道题目,请评价以下代码并给出改进意见: if (window.addEventListener) {//标准浏览器 var addListener = function(el, type, ...

  8. .NET同步与异步之相关背景知识(六)

    在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...

  9. 【腾讯Bugly干货分享】Android进程保活招式大全

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...

  10. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...