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);

WebRequestHandlerHttpMessageHandler派生。您还可以通过从HttpMessageHandler派生插入自定义消息处理程序中

Asp.Net Web API(六)的更多相关文章

  1. 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. 本文主要来讲解以下内容: ...

  2. 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 ...

  3. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  4. ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...

  5. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【开篇】【持续更新中。。。】

    最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http://bitoftech.net/2013/11/25/detailed-tuto ...

  6. ASP.NET Web API 学习【转】

    转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...

  7. 【转】ASP.NET WEB API系列教程

    from: 西瓜小强 http://www.cnblogs.com/risk/category/406988.html ASP.NET Web API教程(六) 安全与身份认证 摘要: 在实际的项目应 ...

  8. 使用ASP.NET web API创建REST服务(二)

    Creating a REST service using ASP.NET Web API A service that is created based upon the architecture ...

  9. 一个ASP.NET Web API 2.0应用

    在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.N ...

随机推荐

  1. SpringCloud接入EDAS——服务发现篇

    旁白 很久没有写技术文章了,最近不是写水文就是写小说.说到底,还是最近很少研究技术的缘故,已经到了江郎才尽的地步了. 不过,LZ无意间看到自己团队的小伙伴写的一些文章,觉得还是不错的,于是便动了心思, ...

  2. head first python菜鸟学习笔记(第六章)

    1. Python提供字典,允许有效组织数据,将数据与名关联,从而实现快速查找,而不是以数字关联. 字典是内置数据结构,允许将数据与键而不是数字关联.这样可以使内存中的数据与实际数据的结构保持一致.? ...

  3. react入门到进阶(一)

    一.何为react Facebook在F8会议上首次提出这个概念,一套全新的框架就此诞生. React 不是一个完整的 MVC.MVVM 框架,其只负责 View 层 React 跟 Web Comp ...

  4. 安装memcached

    简介 memcached是免费和开放源代码的高性能分布式内存对象缓存系统,旨在通过减轻数据库负载来加速动态Web应用程序.其有以下特点: 基于简单的文本行协议 全部数据按照k/v形式存放在内存中,无持 ...

  5. JavaWeb框架SSH_Struts2_(四)----->表达式语言OGNL

    1. 表达式语言OGNL OGNL简介 OGNL基本语法 常量 操作符 OGNL表达式 OGNL基础 OGNL上下文 OGNL值栈 OGNL的访问 2. 具体内容 2.1 OGNL简介 OGNL(Ob ...

  6. Django的ModelForm组件

    创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import mode ...

  7. LoadRunner性能测试过程中报Error(-17998):Failed to get [param not passed in call] thread TLS entry.

    最近与其他公司一起合作使用loadrunner11进行性能测试,在此过程中,遇到Error(-17998)的错误,从网上搜索,找到的答案基本上都是说没有定义事务,但检查所有测试代码,发现都已经定义了事 ...

  8. 计算出前N项的数据

    #include<iostream> #include<algorithm> #include<numeric> using namespace std; ; in ...

  9. VMware中克隆虚拟机出现eth0改变为eth1情况

    解决如下: 查看复制虚拟机网卡信息如下: root@jcfx-2 ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:CC:32:63 inet ...

  10. Python连接MySQL数据库中各种坑

    第一个坑 要想连接数据库,我们必须拥有MySQL-python这个模块,首先,我在安装这个模块的时候就到了第一个大坑. 常规安装方法:进入cmd 使用 pip install MySQL-python ...