2022-07-18 乐帮网
webapi
首先本项目限制的是Framework ,如果你想要问Net Core或者更高版本的Web API,那里何期简单,只需要在进程中命令行进行托管就可以了,关注我后面的文章会举例说明。
以Framework4.0为例,我们如何实现一个Web API的托管。
(1)新建一个Framework4.0项目,可以是控制台或者Windows Form项目,任意有主进程的项目。
(2)引入Nuget 包:Microsoft.AspNet.WebApi.SelfHost
(3)写入主代码【注意】运行时会阻塞,因此我们将以下代码放入一个单独的Task中运行。
using System.Web.Http;
using System.Web.Http.SelfHost;
var config = new HttpSelfHostConfiguration("http://localhost:8080");
bool isRunning = true;
config.Routes.MapHttpRoute(
    "API Default", "api/{controller}/{id}", 
    new { id = RouteParameter.Optional });
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
    server.OpenAsync().Wait();
    while(isRunning){
	Thread.Sleep(2000);
    }
}
(4)下面写api的实现类,首先是实体类
namespace SelfHost
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}
下面是ProductsController类
namespace SelfHost
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Web.Http;
    
    public class ProductsController : ApiController
    {
        Product[] products = new Product[]  
        {  
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },  
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },  
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }  
        };
        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }
        public Product GetProductById(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return product;
        }
        public IEnumerable<Product> GetProductsByCategory(string category)
        {
            return products.Where(p => string.Equals(p.Category, category,
                    StringComparison.OrdinalIgnoreCase));
        }
    }
}
可以得知共有三个可访问的url
| URI | 说明 | 
|---|---|
| /api/products | 获取所有产品的列表。 | 
| /api/products/id | 按 ID 获取产品。 | 
| /api/products/?category=category | 按类别获取产品列表。 | 
运行程序后访问以上的url可以发现已经可以正常运行了。
参考链接:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/older-versions/self-host-a-web-api
                        
                                关注我的微信公众号
                                在公众号里留言交流
                                投稿邮箱:1052839972@qq.com
                            
                        庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
                        雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
                        
                    
                        
                                如果感觉对您有帮助
                                欢迎向作者提供捐赠
                                这将是创作的最大动力