WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
随笔 - 1079, 文章 - 1, 评论 - 75, 阅读 - 174万
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

【C#】使用OWIN创建Web API

Posted on   WebEnh  阅读(5391)  评论(1编辑  收藏  举报

OWIN的介绍

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

 

OWIN的使用

  • 创建项目  

    

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

    

    

  • 添加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();
            }
        }
    }
}
复制代码
复制代码

 

 
 

演示

  • 启动服务端程序

  • 发送GET请求

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

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

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

  • 发送POST请求

指定请求内容格式为json


 

  • 添加自定义请求

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

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

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

-演示


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

 

 
 
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多