托管与调用Web API

托管Web API

打开Program.cs文件并添加以下using语句:

using System.Web.Http;

using System.Web.Http.SelfHost;

将以下代码添加到Program类。

var config = new HttpSelfHostConfiguration("http://localhost:8080");

 

config.Routes.MapHttpRoute(

    "API Default", "api/{controller}/{id}",

    new { id = RouteParameter.Optional });

 

using (HttpSelfHostServer server = new HttpSelfHostServer(config))

{

    server.OpenAsync().Wait();

    Console.WriteLine("Press Enter to quit.");

    Console.ReadLine();

}

(可选)添加HTTP URL命名空间预留

这个应用程序监听http://localhost:8080/。默认情况下,侦听特定HTTP地址需要管理员权限。因此,当您运行本教程时,您可能会收到此错误:“HTTP无法注册URL http:// +:8080 /”有两种方法可以避免此错误:

1.使用提升的管理员权限运行Visual Studio,或

2. 使用Netsh.exe为您的帐户授予保留URL的权限。

要使用Netsh.exe,请使用管理员权限打开命令提示符并输入以下命令:以下命令:

netsh http add urlacl url=http://+:8080/ user=machine\username

其中machine \ username是您的用户帐户。

完成自托管后,请务必删除预订:

netsh http delete urlacl url=http://+:8080/

 

从客户端应用程序调用Web API(C#)

我们编写一个调用Web API的简单控制台应用程序。向解决方案添加新的控制台应用程序项目:创建名为“ClientApp”的新控制台应用程序。

使用NuGet包管理器添加ASP.NET Web API核心库包:在Manage NuGet Packages对话框中,选择Online。在搜索框中,键入“Microsoft.AspNet.WebApi.Client”。选择Microsoft ASP.NET Web API客户端库包,然后单击“ 安装”

在ClientApp中向SelfHost项目添加引用:在解决方案资源管理器中,右键单击ClientApp项目。选择添加引用。在Reference Manager对话框的解决方案下,选择Projects。选择SelfHost项目。

打开Client / Program.cs文件。添加以下using语句:

using System.Net.Http;

添加一个静态HttpClient实例:

 

namespace Client

{

    class Program

    {

        static HttpClient client = new HttpClient();

    }

}

添加以下方法以列出所有产品,按ID列出产品,并按类别列出产品。

 

static void ListAllProducts()

{

    HttpResponseMessage resp = client.GetAsync("api/products").Result;

    resp.EnsureSuccessStatusCode();

 

    var products = resp.Content.ReadAsAsync<IEnumerable<SelfHost.Product>>().Result;

    foreach (var p in products)

    {

        Console.WriteLine("{0} {1} {2} ({3})", p.Id, p.Name, p.Price, p.Category);

    }

}

 

static void ListProduct(int id)

{

    var resp = client.GetAsync(string.Format("api/products/{0}", id)).Result;

    resp.EnsureSuccessStatusCode();

 

    var product = resp.Content.ReadAsAsync<SelfHost.Product>().Result;

    Console.WriteLine("ID {0}: {1}", id, product.Name);

}

 

static void ListProducts(string category)

{

    Console.WriteLine("Products in '{0}':", category);

 

    string query = string.Format("api/products?category={0}", category);

 

    var resp = client.GetAsync(query).Result;

    resp.EnsureSuccessStatusCode();

 

    var products = resp.Content.ReadAsAsync<IEnumerable<SelfHost.Product>>().Result;

    foreach (var product in products)

    {

        Console.WriteLine(product.Name);

    }

}

 

这些方法中的每一种都遵循相同的模式:

调用HttpClient.GetAsync将GET请求发送到适当的URI。

调用HttpResponseMessage.EnsureSuccessStatusCode。如果HTTP响应状态是错误代码,则此方法将引发异常。

调用ReadAsAsync <T>以从HTTP响应中反序列化CLR类型。此方法是一个扩展方法,在System.Net.Http.HttpContentExtensions中定义。

GetAsyncReadAsAsync方法都是异步的。它们返回表示异步操作的Task对象。获取Result属性会阻塞线程,直到操作完成。

有关使用HttpClient的更多信息,包括如何进行非阻塞调用,请参阅从.NET客户端调用Web API

在调用这些方法之前,请将HttpClient实例上的BaseAddress属性设置为

“ http://localhost:8080”。例如:

static void Main(string[] args)

{

    client.BaseAddress = new Uri("http://localhost:8080");

 

    ListAllProducts();

    ListProduct(1);

    ListProducts("toys");

 

    Console.WriteLine("Press Enter to quit.");

    Console.ReadLine();

}

这应输出以下内容。(请记住首先运行SelfHost应用程序。)

 

1 Tomato Soup 1.0 (Groceries)

2 Yo-yo 3.75 (Toys)

3 Hammer 16.99 (Hardware)

ID 1: Tomato Soup

Products in 'toys':

Yo-yo

Press Enter to quit.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值