【C#】使用OWIN创建Web API

摘要:
同样也可通过浏览器来直接发送GET请求,如下:其中localhost:9000/api/query/ok对应OWIN路由配置中的routeTemplate:"api/{controller}/{id}"。发送POST请求指定请求内容格式为json添加自定义请求上述是针对API请求的路由规则,下面简述在普通MVC页面请求的路由规则下,自定义请求方式的方法。-首先修改Startup中的路由规则,在{controller}后加{action},其后的{id}则会对应action中的参数。

OWIN的介绍

OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦,使得便携式 .NET Web 应用以及跨平台的愿望成为现实, 标准的 OWIN 应用可以在任何 OWIN 兼容的服务器上运行,不再依赖于Windows和IIS 。

OWIN的使用

  • 创建项目

【C#】使用OWIN创建Web API第1张

  • 向项目中添加Microsoft.AspNet.WebApi.Owin 和Microsoft.AspNet.WebApi.Owin Self Host包(Self Host 用于开启OWIN Host,设置监听接受Http请求)

【C#】使用OWIN创建Web API第2张

【C#】使用OWIN创建Web API第3张

  • 添加Startup类

Startup是OWIN约定的,用于对OWIN做相关配置的,代码如下:

复制代码
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace OwinTest
{
    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            // 创建 Web API 的配置
            var config = new HttpConfiguration();
            // 启用标记路由
            config.MapHttpAttributeRoutes();
            // 默认的 Web API 路由
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            // 将路由配置附加到 appBuilder
            appBuilder.UseWebApi(config);
        }
    }
}
复制代码
  • 新建Controllers文件夹,添加queryControllers类

按照 Web API 项目的约定,在项目中添加一个名称为 Controllers 的文件夹,然后新建 一个queryController类,设置其基类为 System.Web.Http.ApiController ,作为示例,其内容与 Visual Studio 自带的 Web API Controller 模板一致,包含4种请求方式(GET/POST/PUT/DELETE),用于演示,重写GET方法(直接返回请求参数)和POST方法(接受实体类参数直接返回),queryController代码如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace OwinTest.Controllers
{
    public class queryController : ApiController 
    {
        // GET api
        public string Get(string id)
        {
            return id;
        }
        // POST api
         public DeParams Post(DeParams dp)
        {
            return dp;
        }
        // PUT api
        public void Put(int id, string value)
        {
        }
        // DELETE api
        public void Delete(int id)
        {
        }
    }
}
        
复制代码
  • 在Program.cs文件中的 Main 方法中添加OWIN启动方法,代码如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin.Hosting;
namespace OwinTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string baseAddress = "http://localhost:9000/";
            // Start OWIN host 
            using (WebApp.Start<Startup>(url: baseAddress))
            {
                HttpClient client = new HttpClient();
                Console.WriteLine(baseAddress);
                Console.ReadLine();
            }
        }
    }
}
复制代码

演示

  • 启动服务端程序

【C#】使用OWIN创建Web API第10张

  • 发送GET请求

DHC是一个测试HTTP/REST API的在线工具,https://www.sprintapi.com/dhcs.html,本地测试需在Google商店下载扩展插件。

【C#】使用OWIN创建Web API第11张

同样也可通过浏览器来直接发送GET请求,如下:

其中localhost:9000/api/query/ok 对应OWIN路由配置中的 routeTemplate: "api/{controller}/{id}"。

【C#】使用OWIN创建Web API第12张

  • 发送POST请求

指定请求内容格式为json

【C#】使用OWIN创建Web API第13张


  • 添加自定义请求

上述是针对API请求的路由规则(routeTemplate: "api/{controller}/{id}"),下面简述在普通MVC页面请求的路由规则(routeTemplate: "{controller}/{action}/{id}")下,自定义请求方式的方法。

-首先修改Startup中的路由规则,在{controller}后加{action},其后的{id}则会对应action中的参数。修改后的Startup如下:

【C#】使用OWIN创建Web API第14张

-其次在之前的queryController类中添加自定义的方法,先声明请求方式([HttpGet]、[HttpPost]、[HttpDelete]、[HttpPut]等方法特性),然后添加自定义方法,如下:

【C#】使用OWIN创建Web API第15张

-演示

【C#】使用OWIN创建Web API第16张


有些地方不够详细,我会后期补充,理解有误的地方,还请各位批评指正。

免责声明:文章转载自《【C#】使用OWIN创建Web API》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#反射浅析python爬虫数据解析之xpath下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java中System.out.println()为何会影响内存可见性?

我们先来看段代码: 1 class ThreadVolatileDemo extendsThread{ 2 static boolean flag=true;//注意该变量没有被volatile修饰 3 @Override 4 public voidrun() { 5 while(flag){ 6 S...

[工具]图片等比例压缩工具

写在前面 在网盘中有这样一个功能,需要获取所有图片的列表,想来想去,觉得还是生成相同比例的图片,在排版上更美观一些。所以就没事高了一个压缩的工具玩玩。 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat...

Android x86镜像分析

这几天可能要接个Android的项目,基于x86平台。所以先了解一下android的安装过程。在其官方网站上下载了Android的img,先面就解压出来看看吧,需要说明的是以下的操作都是在root用户下进行的。 mkdir android mount android-x86-4.3-20130725.iso android 通过以上的命令可以把我们下载...

在Visual Studio中使用MonoTouch开发iOS应用程序(下):开发体验 狼人:

对于熟悉.NET程序员来说,编写iOS应用程序的最佳选择自然是MonoTouch。在上一篇文章里,我们已经在Mac OS X上安装了MonoTouch开发环境,并已经能够在Mac OS X和Windows之间共享文件。现在我们就可以来简单体验一下,如何使用Visual Studio,Interface Builder以及少量的MonoDevelop来开发一...

FreeRTOS-Qemu 实现三任务同步通信机制以及API信息

1. 本次作业的考察要点: 作业地址:github.com/HustWolfzzb…Git/GCC/GDB/QEMU等工具的使用。FreeRTOS多任务同步和通信机制的掌握。 2. 编程作业: 在github上,Fork例程项目(github.com/cbhust/STM3… 到自己的个人账号。clone项目到本地电脑的Ubuntu虚拟机中(虚拟机环...

Xamarin.Forms之Resx

本来使用Resx很简单的事,但是在Xamarin.Studio中遇到问题 [MonoDroid] UNHANDLED EXCEPTION: [MonoDroid] System.Resources.MissingManifestResourceException: Could not find any resources appropriate for t...