Asp.Net Web API(六)
Asp.Net Web API不可以需要IIS。可以自己在主机上承载一个Web API
创建WebAPI.Server项目
创建一个控制器项目的服务端
在Nuget中添加Microsoft.AspNet.WebApi.SelfHost
创建Model与Controller
首先在服务端添加一个Product类型
namespace WebAPI.Server.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
然后添加一个ProductController控制器,这个控制器继承于Sytem.Web.Http.ApiController。记得扩展引用System.Web.Http
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
using WebAPI.Server.Models; namespace WebAPI.Server.Controller
{
public class ProductController:ApiController
{
private static IList<Product> products;
static ProductController()
{
products = new List<Product>();
products.Add(new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = });
products.Add(new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M });
products.Add(new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M });
} /// <summary>
/// 获取所有商品
/// </summary>
/// <returns></returns>
public IEnumerable<Product> GetProducts()
{
return products;
}
/// <summary>
/// 获取商品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Product GetProductById(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product;
}
/// <summary>
/// 添加商品
/// </summary>
/// <param name="product"></param>
public void PostProduct(Product product)
{
products.Add(product);
}
/// <summary>
/// 修改商品
/// </summary>
/// <param name="id"></param>
/// <param name="product"></param>
public void PutProduct(int id,Product product)
{
var pro= products.SingleOrDefault(y => y.Id == id);
pro.Category = product.Category;
pro.Name = product.Name;
pro.Price = product.Price;
}
/// <summary>
/// 删除商品
/// </summary>
/// <param name="id"></param>
public void DeleteProduct(int id)
{
products.Remove(products.SingleOrDefault(y => y.Id == id));
}
}
}
承载Web API
在Program类中添加如下引用
using System.Http;
using System.Web.Http.SelfHost;
然后再添加如下代码
using System;
using System.Web.Http;
using System.Web.Http.SelfHost; namespace WebAPI.Server
{
class Program
{
static void Main(string[] args)
{
//创建HTTP服务的配置类
var config = new HttpSelfHostConfiguration("http://localhost:7777");
config.Routes.MapHttpRoute(
"API Default","api/{Controller}/{id}",
new { id=RouteParameter.Optional}
);
//创建System.Web.Http的实现类
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("服务端已开启");
Console.Read();
}
}
}
}
这个应用程序监听“http://localhost:7777”。默认情况下,侦听一个特殊的HTTP URL是需要管理员权限的。运行上面应用程序时,可能会得到这样一个错误:“HTTP could not register URL http://+:7777",这儿有两种方式去避免这个错误:
1.以管理员身份运行Visual Studio。
2.使用Netsh.exe给与你的账号权限去保留这个URL。
若要使用Netsh.exe,以管理员身份打开命令提示框,并键入以下命令:
netsh http add urlacl url=http://+:7777/ user=machine\username
其中machine\username是您的用户帐户。
当你使用完自托管的时候,最好是确定删除这个保留的URL。
netsh http delete urlacl url=http://+:7777/
然后启动服务端
创建WebAPI.Client 项目
创建一个控制台项目的客户端
在Nuget中添加Microsoft.AspNet.WebApi.Client
添加Model
在客户端中添加一个与服务端具有相同属性的Product的实体模型
namespace WebAPI.Client.Models
{
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
创建HttpClient辅助类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using WebAPI.Client.Models; namespace WebAPI.Client
{
public class MyHtppClient
{
HttpClient client;
public MyHtppClient(String uri)
{
//初始化客户端
client = new HttpClient();
client.BaseAddress = new Uri(uri);
//为请求头添加一项。
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")
);
}
/// <summary>
/// 获取所有商品
/// </summary>
public void GetAll()
{
//获取
HttpResponseMessage message = client.GetAsync("api/product").Result;
if(message.IsSuccessStatusCode)
{//成功返回
var produsts = message.Content.ReadAsAsync<IEnumerable<Product>>().Result;
foreach (var item in produsts)
{
Console.WriteLine($"商品编号:{item.Id};商品名称:{item.Name};商品价格:{item.Price};商品类型:{item.Category}");
}
}
}
public void GetbyId(int id)
{
HttpResponseMessage message = client.GetAsync($"api/product/{id}").Result;
if(message.IsSuccessStatusCode)
{
var product = message.Content.ReadAsAsync<Product>().Result;
Console.WriteLine($"商品编号:{product.Id};商品名称:{product.Name};商品价格:{product.Price};商品类型:{product.Category}");
}
}
public void Add(Product product)
{
HttpResponseMessage message = client.PostAsJsonAsync("api/product", product).Result;
Console.WriteLine("{0} ({1})", (int)message.StatusCode, message.ReasonPhrase);
}
public void Modify(int id,Product product)
{
HttpResponseMessage message = client.PutAsJsonAsync($"api/product/{id}", product).Result;
Console.WriteLine("{0} ({1})", (int)message.StatusCode, message.ReasonPhrase);
}
public void Delete(int id)
{
HttpResponseMessage message = client.DeleteAsync($"api/product/{id}").Result;
Console.WriteLine("{0} ({1})", (int)message.StatusCode, message.ReasonPhrase);
}
}
}
然后我们在main方法中测试所有方法
namespace WebAPI.Client
{
class Program
{
static void Main(string[] args)
{
MyHtppClient myHtppClient = new MyHtppClient("http://localhost:7777");
myHtppClient.GetAll();
}
}
}
其它方法在这就不再做测试
配置HttpClient
如果要配置HttpClient,就创建一个WebRequestHandler实例,设置它的属性并将它传递给HttpClient构造函数
WebRequestHandler handler = new WebRequestHandler()
{
AllowAutoRedirect = false,
UseProxy = false
};
HttpClient client = new HttpClient(handler);
WebRequestHandler从HttpMessageHandler派生。您还可以通过从HttpMessageHandler派生插入自定义消息处理程序中
Asp.Net Web API(六)的更多相关文章
- Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html. 本文主要来讲解以下内容: ...
- Asp.Net Web API 2第六课——Web API路由和动作选择
Asp.Net Web API 导航 Asp.Net Web API第一课——入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web AP ...
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- ASP.NET Web API路由系统:路由系统的几个核心类型
虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【开篇】【持续更新中。。。】
最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http://bitoftech.net/2013/11/25/detailed-tuto ...
- ASP.NET Web API 学习【转】
转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...
- 【转】ASP.NET WEB API系列教程
from: 西瓜小强 http://www.cnblogs.com/risk/category/406988.html ASP.NET Web API教程(六) 安全与身份认证 摘要: 在实际的项目应 ...
- 使用ASP.NET web API创建REST服务(二)
Creating a REST service using ASP.NET Web API A service that is created based upon the architecture ...
- 一个ASP.NET Web API 2.0应用
在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.N ...
随机推荐
- [转载] HBase vs Cassandra:我们迁移系统的原因
转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...
- ssh相关原理学习与常见错误总结
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- cgg之类型转换
3.类型转换 3.1算术类型转换 编译器默认的隐式转换等级: long double >double >float >long long >long >int >c ...
- RunLoop想入门,看这篇就够了
前言 刚刚听到RunLoop的时候我也是一脸懵逼,这是什么,有什么用呢,逼格貌似还挺高.然后就开始尝试去搞懂它,去找博客,但是几乎所有的博客都是枯燥乏味的,都是讲概念,然后给个实例,对于我这个小白来说 ...
- Tomcat:Can't load AMD 64-bit .dll on a IA 32 platform(问题记录)
从报错看,这主要是应为64位-32位不兼容导致的.好在,在报此错的情况下,tomcat还是跑起来了. 具体来说,从网上搜索的一些资料来看,应该是jdk版本与tomcat不一致 .tomcat我的是64 ...
- 用python实现一个简单的词云
对于在windows(Pycharm工具)里实现一个简单的词云还是经过了几步小挫折,跟大家分享下,如果遇到类似问题可以参考: 1. 导入wordcloud包时候报错,当然很明显没有安装此包. 2. 安 ...
- 《java.util.concurrent 包源码阅读》08 CopyOnWriteArrayList和CopyOnWriteArraySet
CopyOnWriteArrayList和CopyOnWriteArraySet从数据结构类型上来说是类似的,都是用数组实现的保存一组数据的数据结构,区别也简单就是List和set的区别.因此这里就先 ...
- javaScript基础概念小知识点集
数据类型 typeof是一个操作符而不是函数,因此例子中圆括号尽管可以使用,但不是必须的. 只要在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null NaN是一个特殊的数值,与任何值都 ...
- win下搭建python3+PyQt5+eric6环境
一.安装python3 1.下载python3的安装包,默认安装即可,注意勾选 Add Python 3.6 to Path .但是这样默认安装的路径太长,不太方便找到,可选择定制安装,自己定义安装路 ...
- 【原创】1、简单理解微信小程序
先看下网站的运行方式: 而小程序是这样: what?就这样?是的,就这样.那小程序官方提供的Wafer,还有Wafer2...想太多了,抛弃它们吧.不应当为了解决一个简单的旧问题而去整一个复杂的新问题 ...