zoukankan      html  css  js  c++  java
  • 基于OWIN的WEB API承载

    使用VS2013可以直接创建web api,然后承载到IIS中就可以供外部访问。但这样必须依赖于IIS,如果采用OWIN,则不再依赖,仅仅是运行了一个执行程序而已。先来看看效果图。


    具体步骤如下

    1.新建一个空的web项目,然后使用nuget搜索安装Microsoft.AspNet.WebApi.OwinSelfHost.具体可以参见该文http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api。

    2.构建提供访问的控制器

    创建ValuesParamController,注意一定要Controller作为后缀的控制器类。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Http;
    
    namespace WebApiOwin
    {
        public class ValuesParamController : ApiController
        {
            /// <summary>
            /// 获取产品
            /// </summary>
            /// <param name="productId">产品ID</param>
            /// <returns></returns>
            public String TestProduct(Guid productId)
            {
                return productId.ToString();
            }
    
            /// <summary>
            /// 获取产品
            /// </summary>
            /// <param name="productId">产品ID</param>
            /// <returns></returns>
            public Product GetProduct(Guid productId)
            {
                if (productId == null)
                {
                    throw new Exception("缺少产品ID");
                }
                Product product = new Product();
                product.Id = productId.ToString();
                product.Name = "TEST";
                return product;
            }
        }
    
        public class Product
        {
            #region 属性
            private String _id;
            /// <summary>
            /// 唯一标识
            /// </summary>
            public String Id
            {
                get { return _id; }
                set { _id = value; }
            }
    
            private String _name = String.Empty;
            /// <summary>
            /// 名称
            /// </summary>
            public String Name
            {
                get { return _name; }
                set { _name = value; }
            }
    
            #endregion
        }
    }
    
    3.启动类 

    using Owin;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Http;
    
    namespace WebApiOwin
    {
        public class Startup
        {
            public void Configuration(IAppBuilder appBuilder)
            {
                // Configure Web API for self-host. 
                //HttpConfiguration config = new HttpConfiguration();
                //默认的模板配置,这种配置方式只能提供http://localhost:9000/api/valuesparam的访问方式,
                //该无法定位到函数的访问方式即http://localhost:9000/api/valuesparam/getproduct
                //config.Routes.MapHttpRoute(
                //    name: "DefaultApi",
                //    routeTemplate: "api/{controller}/{id}",
                //    defaults: new { id = RouteParameter.Optional }
                //);
                //appBuilder.UseWebApi(config);
    
                HttpConfiguration config = new HttpConfiguration();
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",//其中action指的就是方法名,这种方式可以直接按http://localhost:9000/api/valuesparam/getproduct的方式访问
                    defaults: new { id = RouteParameter.Optional }//Optional表明routeTemplate中的id是可选的
                );
                appBuilder.UseWebApi(config);
            }
        }
    }
    

    注:MapHttpRote的配置方式可以参照VS创建web api默认创建的路由配置方式来配置,参见下图


    4.宿主程序

    using Microsoft.Owin.Hosting;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WebApiOwin
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Start OWIN host 
                var server = WebApp.Start<Startup>(url: "http://localhost:9000/");
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("Web API listening at http://localhost:9000/");
    
                // 程序直接访问web api
                HttpClient client = new HttpClient();
                var response = client.GetAsync("http://localhost:9000/api/ValuesParam/TestProduct?productId={BDCB861C-7266-4D10-BBC1-4FDD83AF58BE}").Result;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(response.Content.ReadAsStringAsync().Result);
    
                response = client.GetAsync("http://localhost:9000/api/ValuesParam/getproduct?productId={BDCB861C-7266-4D10-BBC1-4FDD83AF58BE}").Result;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(response.Content.ReadAsStringAsync().Result);
    
                Console.ReadLine();
            }
        }
    }
    
    注:ValuesParam是控制器类名去掉Controller的名称,getproduct是函数名,问号后面的是参数及数值,productId是参数名,等号后边的是参数的值。

    转载请注明出处

  • 相关阅读:
    《父亲写的散文诗》--许飞
    python 解数独
    github key already in use
    openwrt ddns绑定域名
    hexo 长期后台运行
    修复云服务器rpm无法使用的问题
    vim 取消筛选高亮
    力扣 2021.02.25 最长公共前缀
    [模板]-Manacher
    背包问题回顾
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604951.html
Copyright © 2011-2022 走看看