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. 在PowerShell中使用curl(Invoke-WebRequest)

    前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool.然而命令行真的会比界面快的多,如果你是一个码农. situation:接到需求分析bug,需要访 ...

  2. Syscan360会议胸牌破解揭秘

    Syscan360会议胸牌破解揭秘 背景 有幸参加今年11月份的上海Syscan360安全会议,会议期间有一个亮点就是360的独角兽团队设计了一款电子badge(胸牌)供参加人员进行破解尝试,类似于美 ...

  3. UniqueIdentifier 数据类型 和 GUID 生成函数

    UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格 ...

  4. 04.SQLServer性能优化之---读写分离&数据同步

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 过段时间再继续写文章吧,本来准备把SQLServer一个系列写完的,最近状态很差很不好, ...

  5. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

  6. C++内联函数

    在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数.内联函数作为编译器优化手段的一种技术,在降低 ...

  7. 【夯实PHP基础】PHP数组,字符串,对象等基础面面观

    本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...

  8. swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明

    关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...

  9. 如何dos命令打开服务窗口?

    1.输入services.msc点击<确定>进入服务窗口.如图:

  10. Set up VLAN (802.1q) tagging on a network interface?

    SOLUTION VERIFIED October 13 2015 KB39674 KB741413 environment Red Hat Enterprise Linux 4 Red Hat En ...