.net6 WPF实现web服务&Sweeger&Controller

1.需要的nuget包

Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.Hosting

Swashbuckle.AspNetCore

2.启停服务类

using EdgeCommon;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using System;
using System.Net;
using System.Threading.Tasks;

namespace EdgeCommuting
{
    internal class HostHelper
    {
        private static IHost host = default!;
        internal async Task<bool> StartAsync(HttpDefine httpDefine, string verson)
        {
            IPAddress? ip = default!;
            if (!httpDefine.ListenAnyIp &&
                !IPAddress.TryParse(httpDefine.IpAddress, out ip))
            {
                LocalLog.Api($"未能开启web服务:IP地址格式错误{httpDefine.IpAddress}");
                return false;
            }
            try
            {
                host = Host.CreateDefaultBuilder().ConfigureWebHostDefaults(web =>
                {
                    web.UseKestrel();
                    web.ConfigureKestrel((config, options) =>
                    {
                        if (httpDefine.ListenAnyIp)
                        {
                            options.ListenAnyIP(httpDefine.Port,
                                    listenOptions =>
                                    {
                                        listenOptions.Protocols = HttpProtocols.Http1AndHttp2;
                                        if (httpDefine.Https.UseHttps)
                                            listenOptions.UseHttps(httpDefine.Https.CertificateName,
                                                httpDefine.Https.CertificatePassword);
                                    }
                                );
                        }
                        else
                        {
                            options.Listen(ip, httpDefine.Port, listenOptions =>
                            {
                                listenOptions.Protocols = HttpProtocols.Http1AndHttp2;
                                if (httpDefine.Https.UseHttps)
                                    listenOptions.UseHttps(httpDefine.Https.CertificateName,
                                        httpDefine.Https.CertificatePassword);
                            });
                        }
                        options.Limits.MaxConcurrentConnections = 200;
                        options.Limits.MaxConcurrentUpgradedConnections = 200;
                        options.Limits.MaxRequestBodySize = 1000_0000;
                        options.Limits.MinRequestBodyDataRate = 
                            new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
                        options.Limits.MinResponseDataRate =
                                new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
                    });
                    web.ConfigureServices(services =>
                    {
                        services.AddControllers();
                        if (httpDefine.UserSwagger)
                        {
                            services.AddSwaggerGen(options =>
                            {
                                options.SwaggerDoc("Bruce", new OpenApiInfo()
                                {
                                    Version = verson,
                                    Title = "Bruce的Sweeger",
                                    Description = "Bruce的API接口"
                                });
                            });
                        }
                    });
                    web.Configure(app =>
                    {
                        app.UseSwagger();
                        app.UseSwaggerUI(option =>
                        {
                            option.SwaggerEndpoint($"/swagger/Bruce/swagger.json", "Bruce");
                        });
                        app.UseRouting();
                        app.UseEndpoints(endpoints =>
                        {
                            endpoints.MapControllers();
                        });
                    });
                }).Build();
                await host.StartAsync();
                LocalLog.Api("web服务已启动");
                return true;
            }
            catch (Exception e)
            {
                LocalLog.Api($"web服务启动失败:{e.Message}");
                return false;
            }
        }
        internal async Task StopAsync()
        {
            if (host != null)
            {
                using (host)
                {
                    await host.StopAsync();
                }
                LocalLog.Api("web服务已关闭");
            }
        }
    }
}

备注:using EdgeCommon关联的解决方案的其它类,无参考作用. 

3. Controler

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;

namespace EdgeCommuting
{
    [Route("DDMData")]
    [ApiController]
    [ApiExplorerSettings(GroupName = "Bruce")]
    public class MesController : ControllerBase
    {
        [HttpPost("Config")]
        public ApiResponse Config([FromBody] PCConfig config)
        {
            //只是示例,根据需要编写代码
            return new();
        }
        [HttpPost("Param")]
        public ApiResponse Param([FromBody] ApiParamReceive param)
        {
            //只是示例,根据需要编写代码
            return new();
        }
    }
}

4.勾选API文档输出

 项目属性->输出->生成包含API文档的文件

5.Sweeger查看效果

也可以使用Postman等工具访问接口.

 本机测试浏览器输入http://localhost:8060/swagger;备注:服务监听的是8060端口

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用 `PdfiumViewer` 这个 NuGet 包将 PDF 文件转换为图片,它可以在 WPF 应用程序中使用。下面是一个简单的示例: 1. 首先,在 Visual Studio 中创建一个 WPF 应用程序。 2. 在项目中添加 `PdfiumViewer` NuGet 包。 3. 创建一个 `PdfToImageConverter` 类,该类包含一个 `ConvertPdfToImage` 方法,该方法将 PDF 文件转换为图片。代码如下: ```csharp using (var document = PdfiumViewer.PdfDocument.Load(pdfFilePath)) { var image = document.Render(0, 300, 300, true); image.Save(imageFilePath, System.Drawing.Imaging.ImageFormat.Jpeg); } ``` 在这个代码中,我们使用 `PdfiumViewer` 中的 `PdfDocument` 类加载 PDF 文件,然后将它渲染成一个 `System.Drawing.Image` 对象,最后保存为 JPEG 格式的图片文件。 4. 在 WPF 应用程序中,创建一个 `Image` 控件用于显示转换后的图片。 5. 在 WPF 应用程序中,使用 `OpenFileDialog` 对话框选择要转换的 PDF 文件,并将其路径传递给 `ConvertPdfToImage` 方法。 6. 将转换后的图片显示在 `Image` 控件中。 完整的代码示例如下: ```csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void ConvertButton_Click(object sender, RoutedEventArgs e) { var openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "PDF Files (*.pdf)|*.pdf"; if (openFileDialog.ShowDialog() == true) { var pdfFilePath = openFileDialog.FileName; var imageFilePath = Path.Combine(Path.GetDirectoryName(pdfFilePath), Path.GetFileNameWithoutExtension(pdfFilePath) + ".jpg"); var converter = new PdfToImageConverter(); converter.ConvertPdfToImage(pdfFilePath, imageFilePath); var image = new BitmapImage(new Uri(imageFilePath)); ImageControl.Source = image; } } } public class PdfToImageConverter { public void ConvertPdfToImage(string pdfFilePath, string imageFilePath) { using (var document = PdfiumViewer.PdfDocument.Load(pdfFilePath)) { var image = document.Render(0, 300, 300, true); image.Save(imageFilePath, System.Drawing.Imaging.ImageFormat.Jpeg); } } } ``` 这个示例将 PDF 文件转换为 JPEG 格式的图片,但你也可以将其保存为其他格式。同时,你还需要添加一些错误处理和异常处理的代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值