.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);
}
}
}
}
原文地址:https://blog.csdn.net/qq_39569480/article/details/145198680
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!