当前位置: 首页 > news >正文

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活,并且可以让你充分利用ASP.NET的特性和功能,比如模型绑定、过滤器、依赖注入等。同时它也支持通过配置文件进行更复杂的设置。

1.安装依赖包

Microsoft.Owin.Host.HttpListener
Microsoft.AspNet.WebApi.OwinSelfHost(如果你要用到Web API)
在这里插入图片描述
在这里插入图片描述
2.在Program.cs文件中配置web服务

using Microsoft.Owin.Hosting;
using Owin;
using System;
using System.Web.Http;namespace SelfHostedWebApi
{class Startup{// 配置Web API路由和其他设置public void Configuration(IAppBuilder appBuilder){HttpConfiguration config = new HttpConfiguration();config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{action}",defaults: new { id = RouteParameter.Optional });appBuilder.UseWebApi(config);}}class Program{static IDisposable _webApp;[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);// 启动Web API服务string baseAddress = "http://*:9005/";_webApp = WebApp.Start<Startup>(url: baseAddress);Console.WriteLine($"Web API running at {baseAddress}");// 启动WinForms应用程序Application.Run(new MainForm());// 可选:添加其他中间件,例如静态文件支持、跨域资源共享(CORS)等// appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);// 停止Web API服务//_webApp.Dispose();}}
}

3.编写webapi服务

这里比如我们去写一个接收文件的api接口,访问时可直接访问http://ip:9005/api/Files/post

using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using Newtonsoft.Json.Linq; // 引用Newtonsoft.Json库namespace SelfHostedWebApi.Controllers
{public class FilesController : ApiController{private readonly string _fileStoragePath = @"C:\File";// POST api/files[HttpPost]public async Task<HttpResponseMessage> Post(){// 检查请求是否包含 multipart/form-data 内容类型if (!Request.Content.IsMimeMultipartContent()){return Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);}try{var provider = new MultipartMemoryStreamProvider();await Request.Content.ReadAsMultipartAsync(provider);foreach (var file in provider.Contents){var filename = file.Headers.ContentDisposition.FileName.Trim('\"');var buffer = await file.ReadAsByteArrayAsync();// 判断文件是否为.json格式if (filename.EndsWith(".json", StringComparison.OrdinalIgnoreCase)){// 将字节数组转换为字符串string jsonString = System.Text.Encoding.UTF8.GetString(buffer);// 解析JSON字符串dynamic jsonData = JObject.Parse(jsonString);// 处理接收到的JSON数据string message = $"Received JSON data with key 'name': {jsonData.name}";return Request.CreateResponse(HttpStatusCode.OK, new { Message = message });}else{// 如果不是JSON文件,则保存到本地磁盘if (!Directory.Exists(_fileStoragePath)){Directory.CreateDirectory(_fileStoragePath);}var localFilePath = Path.Combine(_fileStoragePath, filename);File.WriteAllBytes(localFilePath, buffer);return Request.CreateResponse(HttpStatusCode.Created, new { FilePath = localFilePath });}}return Request.CreateResponse(HttpStatusCode.BadRequest, "No files found.");}catch (Exception ex){return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);}}}
}
http://www.lryc.cn/news/522854.html

相关文章:

  • MongoDB 学习指南与资料分享
  • 【Azure 架构师学习笔记】- Azure Function (2) --实操1
  • 扫描深度?滤光片和偏振片区别?
  • HJ4 字符串分隔(Java版)
  • 【脑机接口数据处理】matlab读取ns6 NS6 ns5NS5格式脑电数据
  • 用C++实现一个基于模板的观察者设计模式
  • 【华为路由/交换机的ftp文件操作】
  • 微信小程序 实现拼图功能
  • 深度学习项目--基于LSTM的火灾预测研究(pytorch实现)
  • AI时代下 | 通义灵码冲刺备战求职季
  • 当comfyui-reactor-node 安装失败urllib.error.HTTPError: HTTP Error 403: Forbidden解决方法
  • SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输
  • TouchGFX学习笔记(一)
  • Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数
  • 如何将 session 共享存储到 redis 中
  • vue3学习三
  • 彻底理解JVM类加载机制
  • 【计算机体系结构、微架构性能分析】core 与 uncore 分别是哪一些部分?区分 core 和 uncore
  • 鸿蒙打包发布
  • vue2:实现上下两栏布局,可拖拽改变高度
  • MongoDB 学习指南:深入探索非关系型数据库
  • 天机学堂3-ES+Caffeine
  • FPGA车牌识别
  • Pandas库的常用内容归纳
  • R语言的并发编程
  • STM32 FreeRTOS中断管理
  • 数据结构-栈和队列
  • RabbitMQ---TTL与死信
  • 第4章 Kafka核心API——Kafka客户端操作
  • Python爬虫学习前传 —— Python从安装到学会一站式服务