387 字
2 分钟
在 WPF 中使用 ASP.NET Core 处理 HTTP 请求

对于 SDK 样式 csproj 的项目, 只需要添加 Microsoft.AspNetCore.App 的框架引用即可直接使用 ASP.NET Core 的所有 API

创建项目#

首先, 创建一个 SDK 样式 csproj 的 WPF 项目, 并打开项目文件, 它的内容大概是这样:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>

然后, 在 Project 节点下添加 ItemGroup 节点, 并继续向下添加 FrameworkReference 节点, 然后设置其 Include 特性值为 Microsoft.AspNetCore.App. 添加后项目文件大致如下:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>

为了调试时方便, 你也可以将 PropertyGroup 下的 OutputType 设置为 Exe, 这样程序在启动的时候就会带有控制台.

编写主逻辑#

现在, 我们就可以像一个正常的 ASP.NET Core 项目一样, 使用 WebApplicationWebApplicationBuilder 进行后端逻辑的编写了.

接下来, 转到 App.xaml.cs, 重写 OnStartup 方法, 并添加自己的 Web 初始化和运行逻辑, 最后结果大致如下:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var builder = WebApplication.CreateBuilder();
builder.Services.AddControllers(); // 添加控制器
builder.WebHost.UseUrls("http://localhost:5000"); // 更改监听地址
var app = builder.Build();
app.UseDefaultFiles();
app.UseStaticFiles();
app.MapControllers();
app.RunAsync();
}
}

接下来, 我们在项目中添加一个 TestController 类, 用于测试后端请求处理:

[Route("[controller]")]
public class TestController : Controller
{
[HttpGet]
public object Get()
{
return new
{
Fuck = "You world"
};
}
}

最终效果#

启动程序, 并在浏览器访问 http://localhost:5000/test, 可以看到结果:

关于此主题的更完整示例, 可以在 GitHub 上 SlimeNull/UseAspNetCoreInWpf 仓库中查看.

在 WPF 中使用 ASP.NET Core 处理 HTTP 请求
https://slimenull.com/posts/202410030950/
作者
SlimeNull
发布于
2024-10-03
许可协议
CC BY-NC-SA 4.0