首页 > 编程语言 >C# WinForm基于owin创建WebApi

C# WinForm基于owin创建WebApi

时间:2024-03-05 15:55:50浏览次数:31  
标签:WebApi Web string C# public api using id WinForm

在实际的项目开发中,可能会有在WinForm程序中提供Web服务器的需求。
通过owin可以很方便的实现,并且可提供Web静态文件访问服务。

操作方法:

1. 在NuGet引用owin

Microsoft.AspNet.WebApi.Owin
Microsoft.AspNet.WebApi.OwinSelfHost
Microsoft.Owin.StaticFiles
2. 添加服务启动配置类 Startup

namespace WebServer
{
    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 }
            );


            var physicalFileSystem = new PhysicalFileSystem(@".\Web"); //静态网站根目录
            var options = new FileServerOptions
            {
                EnableDefaultFiles = true,
                FileSystem = physicalFileSystem
            };
            options.StaticFileOptions.FileSystem = physicalFileSystem;
            options.StaticFileOptions.ServeUnknownFileTypes = true;
            options.StaticFileOptions.DefaultContentType = "text/plain";
            options.DefaultFilesOptions.DefaultFileNames = new[] { "Index.html" }; //默认页面(填写与静态网站根目录的相对路径)
            appBuilder.UseFileServer(options);

            // 将路由配置附加到 appBuilder
            appBuilder.UseWebApi(config);
        }
    }
}

3. 添加 Controllers 目录,创建 QueryController Web服务类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;

namespace WebServer.Controllers
{
    public class QueryController : ApiController
    {
        //// GET api
        //[HttpGet]
        //public IHttpActionResult Json(string id)
        //{
        //    return Json($"hello123:{id}");
        //}

        // GET api
        public string Get(string id)
        {
            return "hello:" + id;
        }
        // POST api
        public string Post([FromBody] string value)
        {
            return value;
        }
        // PUT api
        public void Put(int id, string value)
        {
        }
        // DELETE api
        public void Delete(int id)
        {
        }
    }
}

4. 在程序中调用如下代码启动Web服务

// 打开Web服务
var server = WebApp.Start<Startup>(url: "http://localhost:9099/");

// 停止Web服务
server.Dispose();
server = null;

5. 在生成的文件目录,创建Web文件夹,放入静态Web资源(index.html)

6. 访问Web资源
浏览器访问静态资源 http://localhost:9099/ 
浏览器访问WebApi  http://localhost:9099/api/Query/123

 

标签:WebApi,Web,string,C#,public,api,using,id,WinForm
From: https://www.cnblogs.com/zjfree/p/18054225

相关文章

  • IDEA 配置 Tomcat
    IDEA配置Tomcat.mdIDEA配置Tomcat最快的方法:使用Maven下面介绍其他方法:以下使用IDEA20231、新建项目2、添加WebApplication这一步很关键:有的IDEA版本是可以在创建项目时勾选框架的。。此处不再展开介绍对于IDEA2023:先找到添加框架支持的工具栏!!!记得点到项目模块那一栏,只......
  • Windows环境下Pytorch项目搭建在Docker中运行
    Windows环境下Pytorch项目搭建在Docker中运行1.安装windows版本的Docker​ 网上已有诸多博客教程,这里就不再赘述。2.搭建本地Pytorch环境​ 搭建本地Pytorch环境的方式我使用了两种方式,推荐使用第一种。​ 第一种:​ (1)在dockerhub中(https://hub.docker.com),找到自己版本......
  • 100. 相同的树c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/boolisSameTree(structTreeNode*p,structTreeNode*q){if(!p&&!q)returntrue;if(!p&a......
  • google benchmark
    最小用例:https://github.com/google/benchmark?tab=readme-ov-file#usage排除干扰:https://github.com/google/benchmark/blob/main/docs/reducing_variance.md1.benmark编译为release版本:-DCMAKE_BUILD_TYPE=Release2.禁止cpu频率调节:sudocpupowerfrequency-set--governor......
  • 脂肪秤方案以CSU18M91芯片开发
    一台脂肪秤通过测试体重、体脂、BMI、水分等数据并给出相应提示,并且许多人都将体脂检测数据作为身体健康指数衡量标准,辅助用户来关注身体健康,同时可以通过蓝牙与手机APP应用相连,记录日常身体变化情况,根据变化情况推荐用户饮食计划+运动计划。人体脂肪秤的原理是肌肉内含......
  • CentOS 7单机部署 Redis 主从复制
    下面是一个完整的、步骤明确的指南,包括如何在CentOS7上以非root用户(在本例中为appworker,属于appworkergroup组)安装和配置Redis主从复制,设置目录权限,以及进行基本的连接测试和维护操作。1.环境准备创建用户和组sudogroupaddappworkergroup#创建一个名为appw......
  • BOSHIDA DC电源模块的PCB设计和布局指南
    BOSHIDADC电源模块的PCB设计和布局指南DC电源模块的PCB设计和布局是一个关键的步骤,它直接影响到电源的性能和稳定性。下面是一些DC电源模块的PCB设计和布局的指南: 1.选择合适的PCB尺寸和层数:根据电源模块的尺寸和功能需求,选择合适的PCB尺寸和层数。注意保持足够的空间来布......
  • BigDecimal的基本使用
    BigDecimal的基本使用BigDecimal是Java中用于处理高精度数值的类。它可以表示任意精度的小数,并提供了各种数值运算的方法。1、创建BigDecimal对象BigDecimal类提供了多个方法来创建BigDecimal对象,下面是一些常用的方法: -BigDecimal(Stringval):使用字符串作为参数创建Bi......
  • 在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invo
    在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invoke-WebRequest、New-Object和Start-BitsTransfer命令来下载文件的方法。使用Invoke-WebRequestInvoke-WebRequest是一个非常强大的命令,用于向网页发送HTTP和HTTPS请求。你可以使用它来下载文......
  • 卸载centos默认防火墙firewalld
    查看该防火墙是否运行systemctlstatusfirewalld停止systemctlstopfirewalld移除开机自启动systemctldisablefirewalld卸载yumremovefirewalld-y卸载完毕  已经没有了 ......