使用控制台程序搭建WebApi

原文参考:

ASP.NET Web Api 2.2: Create a Self-Hosted OWIN-Based Web Api from Scratch

新建控制台程序,引入Owin包

PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost -Pre

添加Startup类

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var webApiConfiguration = ConfigureWebApi();

            // Use the extension method provided by the WebApi.Owin library:
            app.UseWebApi(webApiConfiguration);
        }
        private HttpConfiguration ConfigureWebApi()
        {
            var config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                "DefaultApi",
                "api/{controller}/{id}",
                new { id = RouteParameter.Optional });
            return config;
        }
    }

添加Models、Controllers文件夹,添加Company、CompaniesController

public class Company
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

public class CompaniesController : ApiController
    {
        ApplicationDbContext _Db = new ApplicationDbContext();
        public IEnumerable<Company> Get()
        {
            return _Db.Companies;
        }

        public async Task<Company> Get(int id)
        {
            var company = await _Db.Companies.FirstOrDefaultAsync(c => c.Id == id);
            if (company == null)
            {
                throw new HttpResponseException(
                    System.Net.HttpStatusCode.NotFound);
            }
            return company;
        }

        public async Task<IHttpActionResult> Post(Company company)
        {
            if (company == null)
            {
                return BadRequest("Argument Null");
            }
            var companyExists = await _Db.Companies.AnyAsync(c => c.Id == company.Id);

            if (companyExists)
            {
                return BadRequest("Exists");
            }

            _Db.Companies.Add(company);
            await _Db.SaveChangesAsync();
            return Ok();
        }

        public async Task<IHttpActionResult> Put(Company company)
        {
            if (company == null)
            {
                return BadRequest("Argument Null");
            }
            var existing = await _Db.Companies.FirstOrDefaultAsync(c => c.Id == company.Id);

            if (existing == null)
            {
                return NotFound();
            }

            existing.Name = company.Name;
            await _Db.SaveChangesAsync();
            return Ok();
        }

        public async Task<IHttpActionResult> Delete(int id)
        {
            var company = await _Db.Companies.FirstOrDefaultAsync(c => c.Id == id);
            if (company == null)
            {
                return NotFound();
            }
            _Db.Companies.Remove(company);
            await _Db.SaveChangesAsync();
            return Ok();
        }
    }

添加EntityFramework包,添加ApplicationDbContext

namespace ConsoleWebApi.Models
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext() : base("MyDatabase")
        {
        }
        public IDbSet<Company> Companies { get; set; }
    }

    public class ApplicationDbInitializer : DropCreateDatabaseAlways<ApplicationDbContext>
    {
        protected override void Seed(ApplicationDbContext context)
        {
            base.Seed(context);
            context.Companies.Add(new Company { Name = "Microsoft" });
            context.Companies.Add(new Company { Name = "Google" });
            context.Companies.Add(new Company { Name = "Apple" });
        }
    }
}

App.Config中添加连接字符串

<connectionStrings>
    <add name="MyDatabase" connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/>
  </connectionStrings>

入口Main中添加代码

static void Main(string[] args)
        {
            Console.WriteLine("Initializing and seeding database...");
            Database.SetInitializer(new ApplicationDbInitializer());
            var db = new ApplicationDbContext();
            int count = db.Companies.Count();
            Console.WriteLine("Initializing and seeding database with {0} company records...", count);

            string baseUri = "http://localhost:8080";

            Console.WriteLine("Starting web Server...");
            WebApp.Start<Startup>(baseUri);
            Console.WriteLine("Server running at {0} - press Enter to quit. ", baseUri);
            Console.ReadLine();
        }

启动程序,打开http://localhost:8080/api/companies/1

即可看到结果。

时间: 2024-10-25 10:23:52

使用控制台程序搭建WebApi的相关文章

使用控制台程序搭建OAuth授权服务器

参考地址:ASP.NET Web Api: Understanding OWIN/Katana Authentication/Authorization Part I: Concepts 先上一张OAuth的认证图 很多情况下授权服务器和资源服务器时同一台机器,就有了下面这张图 接着可以使用上一篇文章中的控制台程序,做一些改动 首先需要引入Microsoft.AspNet.Identity.Owin包 PM> Install-Package Microsoft.AspNet.Identity.O

如何使用程序调用webApi接口

如何使用程序调用webApi接口 在C#中,传统调用HTTP接口一般有两种办法: WebRequest/WebResponse组合的方法调用 WebClient类进行调用. 第一种方法抽象程度较低,使用较为繁琐:而WebClient主要面向了WEB网页场景,在模拟Web操作时使用较为方便,但用在RestFul场景下却比较麻烦,在Web API发布的同时,.NET提供了两个程序集:System.Net.Http和System.Net.Http.Formatting.这两个程序集中最核心的类是Htt

白虎大厅程序搭建还未开始,就以其满满的看点,吸引了社会各界的目光

[编者按]CES 2018 还未开始,就以其满满的看点,吸引了社会各界的目光.白虎大厅程序搭建(h5.hxforum.com)企鹅2952777280首先是谷歌用霸气的广告"Hey, Google"包下拉斯维加斯的单轨铁路,气势庞大势不可挡.与去年大会上,凭借智能语音助理 Alexa 出尽风头的亚马逊的大战势必将在今年的大会上开启. CES大战开启2014 年 11 月 6 日,亚马逊在其官网低调地宣布了一款名为 Amazon Echo 的家庭智能音箱,没有发布会.在随后的两年内,Ec

如何提高c/c++大型项目的软件质量微信h5牛牛程序搭建

软件的交付质量一直是我们软件开发项目最为关注的核心问题,那么如何保证软件项目,尤其是大型和超大型软件项目的质量,不管在国内还是国外一直是许多软件企业一直关注和研究的问题. 通常我们会在功能性,可用性,高效性,可测试性,可维护性和可移植性等6个维度来对软件质量进行把控和评定. 1.功能性,即软件是否满足了客户业务要求: 2.可用性,即衡量用户使用软件需要付出多大的努力,简洁容易操作的软件,对于客户来说是非常重要的,就拿国内用户量最大的微信来说,你会不会觉得它的设计总是那么的简洁易用,以至于使用了这

类似快手、抖音手机直播程序搭建经验分享

类似快手.抖音手机直播程序搭建经验分享-呆萌手机直播程序搭建系统管理后台视频上步骤直播行业近年来的发展是有目共睹的,如今通过手机直播源码可以快速搭建部署一套功能丰富的直播系统.很多直播平台运营商在自己的直播系统上线运营之前都会先进行下系统的测试,有时会面临手头的主播资源不足的尴尬境地.此时,可以通过在直播系统管理后台上传其他直播平台的直播录制视频的方式来进行测试.那么具体的操作方式是怎样的呢?本篇就为大家详细分享视频上传经验.一.呆萌手机直播程序搭建视频录制1.????推荐使用UC浏览器,电脑安

微信小程序搭建mpvue+vant+flyio

导语 上一篇文章微信小程序搭建mpvue+vant已经介绍了如何搭起mpvue项目及引入vant,本篇文章继续在它的基础上,引入flyio,并做一些封装,目的是为了在小程序发起请求. 这时读者会有些疑问,小程序已经有了request,为什么还用flyio?这不是造轮子吗?我是这么想的,其实现在不管是mpvue,还是wepy都好像还不能完美编译出微信小程序和h5版本.为了以后应对老板有创建h5版本的想法,我们应该为以后复用小程序代码做好准备工作.既然h5也会有ajax,flyio也支持小程序和h5

Java版菠菜程序搭建BC网站项目开发给演示站包网小白的一些意见

Java版程序是目前世界上公认的高安全性扩展性最好,页面反馈速度极佳的BC网站搭建程序语言,在菲律宾,柬埔寨等东南亚国家,对Java版菠菜程序搭建的网站运营是由衷放心的特别是一些集团公司.在做BC网站项目之前,需要Q先分析3530自己的实际2742情况55,了解自己想要去做的具体方向,打算如何运营,团队如何去组建(网站一个人是运营不起来的),如果这些你都没有清楚的认识那我劝你还是别做了,应为做了对你来说没有具体的运营方向也就没办法运营好,运营不好的网站对你来说根本一文不值.考虑好了网站的运营方向

突破短板,传统桌面程序 使用webapi 扩展迎合web和移动端融合的需求

传统桌面程序不能完全被web和移动端替代,但是需要改造.这里要说的是巧用webapi把以前用dll和com组件,ocx等方式做接口,做分布式开发的方式,改成restful 风格api的方式实现跨平台,多客户端(类型).并分享几则案例. 1.智能储物柜 项目背景:某智慧城市项目需要用到有智能锁的储物柜,用app扫码控制存取,并和智慧城市后台交互.智能锁系统是工业的塔式控制器,使用modbus ascii协议控制,端口使用串口.储物柜配备了工控电脑32寸竖屏,工控电脑控制塔式控制器(单片机),工控机

高级应用程序搭建数据库的详细流程

上一章已经把高级应用程序的环境搭配成功,那么下一步就是搭建数据库了. 首先,我们先去创建一个数据库,比如:demo 创建完之后,我们重要的就是将文件中的数据进行一个更新,在www/advancend/common/config/main-local.php中进行数据库的修改 操作到这一步,我们接着在demo数据库中创建一个表,名字叫做User(必须叫这个名),我们把数据添加到表里面: 添加之后,我们的数据库配置就已经完成啦,我们就可以进行访问网址,但是前提是我们要去前端的web页面进行注册账号,