Blazor 路由及导航开发指南

2023-10-29

翻译自 Waqas Anwar 2021年4月2日的文章 《A Developer’s Guide To Blazor Routing and Navigation》 1

A-Developers-Guide-To-Blazor-Routing-and-Navigation

检查传入的请求 URL 并将它们导航到对应的视图或页面是每个单页应用程序 (SPA) 框架的基本功能。Blazor Server 和 WebAssembly 应用程序也同样支持使用一些内置组件和服务进行路由。在本教程中,我将向您介绍在 Blazor 应用程序中实现路由所需了解的所有内容。

Blazor 应用程序中的路由配置

在开始为不同的 Blazor 组件/页面创建路由之前,我们需要了解如何将 Blazor Server 应用程序集成到 ASP.NET Core Endpoint 路由中。Blazor Server 应用程序通过 SignalR 连接与客户端进行通信,为了接受 Blazor 组件传入的连接,我们在 Startup.cs 文件的 Configure 方法中调用了 MapBlazorHub 方法,如下所示:

app.UseEndpoints(endpoints =>
{
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");
});

默认配置将所有请求都转发到一个 Razor 页面,该页面扮演 Blazor Server 应用程序服务端主机的角色。按照惯例,该主页是 _Host.cshtml,它位于应用程序的 Pages 文件夹中。该主文件中指定的路由称之为应急路由,在路由匹配中具有极低的优先级,这意味着当没有其他路由匹配时,才会使用该路由。

Blazor 路由组件介绍

Router2 组件是 Blazor 中的内置组件之一,用在 Blazor 应用程序的 App 组件之中。该组件启用了 Blazor 应用程序中的路由,并提供与当前导航状态相对应的路由数据。它拦截传入的请求并呈现与请求 URL 相匹配的页面。

<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>

下表显示了 Router 组件的属性。

属性 说明
AdditionalAssemblies 获取或设置其他程序集的集合,这些程序集应在搜索可与 URI 匹配的组件时搜索。
AppAssembly 获取或设置应在其中搜索与 URI 匹配的组件的程序集。
Found 获取或设置当为请求的路由找到匹配项时要显示的内容。
Navigating 获取或设置异步导航正在进行时显示的内容。
NotFound 获取或设置当没有为请求的路由找到匹配项时要显示的内容。
OnNavigateAsync 获取或设置在导航到新页之前应调用的处理程序。

当编译 Blazor 组件 (.razor) 时,它们生成的 C# 类会保存在 obj\Debug\net5.0\Razor\Pages 文件夹中。

Blazor-Componnts-Compiled-into-Classes

如果您打开任意一个已编译的文件,将会注意到在编译之后,所有带有 @page 指令的组件都生成了一个带有 RouteAttribute 特性的类。

RouteAttribute-added-to-all-Blazor-Components-generated-classes

当应用程序启动时,会扫描通过 AppAssembly 属性指定的程序集,从所有指定了 RouteAttribute 特性的类中收集路由信息。

<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">

如果您创建了独立的组件类库,并希望应用程序从这些程序集中扫描和加载路由,那么您可以使用 AdditionalAssemblies 属性来接受一个 Assembly 对象集合。

Blazor-App-Additional-Routes-from-External-Assemblies

下面是一个从定义在组件类库中的两个可路由组件(Component1Component2)加载路由信息的示例。

<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true"
        AdditionalAssemblies="new[] { typeof(Component1).Assembly, typeof(Component2).Assembly }"> 
</Router>

在运行时,RouteView 组件从 Router 接收 RouteData 以及任意路由参数,并使用组件中定义的布局渲染指定的组件。如果未定义布局,则使用 DefaultLayout 属性指定的布局。默认的布局通常是 Shared 文件夹中的 MainLayout 组件,不过您也可以创建并指定一个自定义布局。

<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />

Found 模板用于在找到匹配的路由时显示其内容,正如您在下图中所看到的那样,其中找到了一个匹配路由,并在浏览器中呈现了一个 Counter 页面。

Blazor-App-Counter-Page-Route

NotFound 模板用于在没有找到匹配的路由时显示内容。默认情况下,NotFound 模板仅显示一条消息,如下面的截图所示。

Blazor-App-Default-Error-Page-Contents

我们还可以创建自定义错误的布局和页面,以显示自定义错误页面。让我们在 Shared 文件夹中创建一个新的名为 ErrorLayout.razor 的自定义布局。

ErrorLayout.razor

@inherits LayoutComponentBase
 
<main role="main" class="container"> 
    <div class="text-center">
        @Body
    </div> 
</main>

然后将 LayoutView 组件的 Layout 属性改为 ErrorLayout,并将 LayoutView 里的内容修改如下:

<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(ErrorLayout)">
            <h1 class="display-1">404</h1>
            <h1 class="display-4">Not Found</h1>
            <p class="lead">
                Oops! Looks like this page doesn't exist.
            </p>
        </LayoutView>
    </NotFound>
</Router>

现在,如果您在浏览器中运行应用程序,并尝试访问一个未在应用中任何位置指定过的 URL,那么您将会看到一个自定义的 404 错误页面,如下所示。

Blazor-App-Custom-Error-Page-Layout

所有 Blazor 应用程序都应将 PreferExactMatches 特性显式地设置为 @true,以便路由匹配更倾向于精确匹配,而不是通配符匹配。根据 Microsoft 官方文档,此特性从 .NET 6 开始将不可用,路由器将总是更倾向于精确匹配。

定义路由、参数和约束

在我们学习如何为 Blazor 组件定义路由之前,我们需要确保下面的 base 标签在每个页面都可用,以便正确地解析 URL。如果创建的是 Blazor Server 应用程序,那么您可以将此标签添加到 Pages/_Host.cshtml 文件的 head 部分,如果是 Blazor WebAssembly 应用程序,则可以将此标签添加到 wwwroot/index.html 文件中。

<base href="~/" />

要定义路由,我们可以使用 @page 指令,如下面的 Counter 组件示例所示。

@page "/counter"
 
<h1>Counter</h1>
 
<p>Current count: @currentCount</p>
 
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
 
@code {
    private int currentCount = 0;
 
    private void IncrementCount()
    {
        currentCount++;
    }
}

现在我们就可以使用 /counter URL 访问 Counter 组件了。

Blazor-App-Counter-Page-Route

我们还可以使用多个 @page 指令定义多个路由模板,如下面例所示。

@page "/counter"
@page "/mycounter"

这意味着现在也可以使用 /mycounter URL 访问同一个 Counter 组件:

Blazor-App-Counter-Page-with-Second-Route

使用路由参数将数据从一个页面传递到另一个页面是十分常见的做法,Blazor 路由模板支持路由参数。路由参数名称不区分大小写,一旦我们定义了路由参数,路由器就会自动填充对应的具有相同名称的组件属性。例如,在下面的代码片段中,我们在组件中定义了一个路由参数 title,并创建了一个对应的属性 Title。此属性将自动使用路由参数文本的值填充。然后,我们在 h1 元素中显示 Title 属性作为页面的标题。

@page "/counter/{title}"
 
<h1>@Title</h1>
 
<p>Current count: @currentCount</p>
 
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
 
@code {
    private int currentCount = 0;
 
    [Parameter]
    public string Title { get; set; }
 
    private void IncrementCount()
    {
        currentCount++;
    }
}

运行应用程序,并尝试在地址栏中 /counter/ 之后指定任意的字符串,您将看到路由参数的值会显示为页面标题。

Blazor-App-with-Route-Parameter

我们还可以定义可选的路由参数,如下例所示,其中 title 是可选参数,因为在此参数名称后面带有问号 (?)。假如我们不提供此路由参数的值,该参数将在 OnInitialized 方法中使用默认值 Counter 进行初始化。

@page "/counter/{title?}"
 
<h1>@Title</h1>
 
<p>Current count: @currentCount</p>
 
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
 
@code {
    private int currentCount = 0;
 
    [Parameter]
    public string Title { get; set; }
 
    protected override void OnInitialized()
    {
        Title = Title ?? "Counter";
    }
 
    private void IncrementCount()
    {
        currentCount++;
    }
}

Blazor 还支持路由约束,在路由上强制类型匹配。在下面的代码片段中,我创建了一个 int 类型的路由参数 start,这意味着现在我只能为此路由参数提供整数值。计数器现在将以路由参数中指定的值开始计数。

@page "/counter/{start:int}"
 
<h1>Counter</h1>
 
<p>Current count: @Start</p>
 
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
 
@code { 
    [Parameter]
    public int Start { get; set; }
 
    private void IncrementCount()
    {
        Start++;
    }
}

在浏览器中运行应用程序,并在 URL 中指定任一整数值,比如 /counter/4,您会看到计数器将以该起始值递增。

Blazor-App-with-Route-Parameter-Constraint

下表显示了 Blazor 路由约束支持的类型。

约束 示例 匹配项示例
bool {active:bool} true,FALSE
datetime {dob:datetime} 2016-12-31, 2016-12-31 7:32pm
decimal {price:decimal} 49.99, -1,000.01
double {weight:double} 1.234, -1,001.01e8
float {weight:float} 1.234, -1,001.01e8
guid {id:guid} CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638}
int {id:int} 123456789, -123456789
long {ticks:long} 123456789, -123456789

还可以定义多个路由参数,如下例所示,我们将 startincrement 定义为 int 类型的参数。

@page "/counter/{start:int}/{increment:int}"
 
<h1>Counter</h1>
 
<p>Current count: @Start</p>
 
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
 
@code { 
    [Parameter]
    public int Start { get; set; }
 
    [Parameter]
    public int Increment { get; set; }
 
    private void IncrementCount()
    {
        Start+=Increment;
    }
}

如下所示,运行应用程序并在 URL 地址中指定 startincrement 的值,您会注意到,当您每次点击 Click me 按钮时,计数器不仅会以数字 2 开始计数,而且会以 3 递增。

Blazor-App-with-Multiple-Route-Parameter-and-Constraints

Blazor NavigationManager 服务概述

NavigationManager 服务允许我们在 C# 代码中管理 URI 和导航。NavigationManager 类具有以下常见的属性、方法和事件。

名称 类型 说明
BaseUri 属性 获取或设置当前的基 URI。BaseUri 始终表示为字符串形式的绝对 URI,以斜杠结尾。 通常,这与文档中 <base> 元素的 href 特性相对应。
Uri 属性 获取或设置当前 URI。 Uri 始终以字符串形式表示为绝对 URI。
NavigateTo 方法 导航到指定 URI。
ToAbsoluteUri 方法 将相对 URI 转换为绝对 URI。
ToBaseRelativePath 方法 给定基 URI (比如,前面的 BaseUri 的返回值),将绝对 URI 转换为相对于基 URI 前缀的 URI。
LocationChanged 事件 当导航位置变化时触发的事件。

让我们来创建一个页面,查看一下以上属性和方法的一些实际行为。创建一个新的 Blazor 组件并使用 @inject 指令注入 NavigationManager 服务。 尝试在页面上打印出 Uri 和 BaseUri 属性,来查看一下它们返回的是什么类型的 URI。

@page "/navigationmanager"
@inject NavigationManager nvm
 
<h3>Navigation Manager</h3>
<br />
 
<p>@nvm.Uri</p>
<p>@nvm.BaseUri</p>

运行应用程序,您将在浏览器中看到类似以下内容的输出。Uri 属性显示当前页面的绝对 URI,而 BaseUri 属性显示当前的基 URI。

Blazor-App-NavigationManager-Properties

在页面上添加两个按钮 Home PageCounter Page,并在 @code 代码块中添加它们的 onclick 事件处理方法。在事件处理方法中,我们可以在 C# 代码中使用 NavigateTo 方法将用户重定向到其它的 Blazor 组件。

@page "/navigationmanager"
@inject NavigationManager nvm
 
<h3>Navigation Manager</h3>
<br />
 
<p>@nvm.Uri</p>
<p>@nvm.BaseUri</p>
 
<button class="btn btn-primary" @onclick="GoToHome">
    Home Page
</button>
 
<button class="btn btn-primary" @onclick="GoToCounter">
    Counter Page
</button>
 
@code {
 
    private void GoToHome()
    {
        nvm.NavigateTo("/");
    }
 
    private void GoToCounter()
    {
        nvm.NavigateTo("counter");
    }
}

运行应用程序并试着点击这两个按钮,将按预期的那样,您可以导航到主页和计数器页面。

Blazor-App-NavigationManager-NavigateTo-Method

如果不想以编程方式处理导航,而想在 HTML 中生成超链接,则可以使用 Blazor NavLink 组件。 NavLink 组件类似于 HTML 中的 <a> 元素,具有一些很酷的功能。如果 NavLink 的 href 特性值与当前的 URL 相匹配,则会自动切换该元素的 active CSS 类(class)。这就使得我们可以在当前选中的链接上应用不同的样式。您可以在 Shared/NavMenu.razor 文件中看到这个组件的用法。

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </li> 
    </ul>
</div>

NavLink 组件还有一个 Match 属性,可以设置为以下选项之一:

  • NavLinkMatch.All:指定当 NavLink 与整个当前 URL 匹配时应处于活动状态。
  • NavLinkMatch.Prefix(默认值):指定当 NavLink 与当前 URL 的任意前缀匹配时应处于活动状态。

Match 属性:获取或设置一个值,该值表示 URL 匹配行为。

总结

在本教程中,我尝试介绍 Blazor 应用程序中的多种路由功能,还介绍了开发者可用的与路由相关的一些组件和服务。我希望您现在能够更熟练地定义路由、参数和约束。如果您喜欢本教程,请与他人分享以传播知识。


相关阅读:

作者 : Waqas Anwar
翻译 : 技术译站
链接 : 英文原文

公众号:技术译站


  1. https://www.ezzylearning.net/tutorial/a-developers-guide-to-blazor-routing-and-navigation A Developer’s Guide To Blazor Routing and Navigation ↩︎

  2. https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.components.routing.router ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Blazor 路由及导航开发指南 的相关文章

  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • .NET 字符串.替换

    我很生气 通常 我喜欢像 C 中那样进行替换 但是是否有一种 C 风格的替换 它一次仅替换一个字母或我指定的 X 数量 不 BCL 中不存在仅替换字符的单个实例的 Replace 方法 两个主要的 Replace 方法将替换所有出现的情况
  • smtpclient“发送邮件失败”

    这是我的代码 for int i 0 i lt number i MailAddress to new MailAddress iMail to MailAddress from new MailAddress iMail from iMa
  • 如何在 C# 中使用 Outlook MAPI 打开 .eml 文件?

    我有一个 C 应用程序 可以读取 msg 文件并提取正文和附件 但是当我尝试加载 eml 文件时 应用程序崩溃了 我正在加载这样的文件 MailItem mailItem MailItem outlookApp CreateItemFrom
  • 如何将一个控件的属性绑定到另一个控件的属性?

    我希望当表单被禁用时 表单中的 保存 按钮消失 我这样做 this formStackPanel IsEnabled someValue if this formStackPanel IsEnabled this saveButton Vi
  • 我是唯一一个收到“当前目标框架中不可用的程序集”的人吗?

    在添加测试项目后 我在使用 Visual Studio 2010 和任何报告此错误的框架版本时遇到了一个持续存在的问题 当前目标框架中不提供程序集 到目前为止 我只在两个程序集上发生过这种情况 并且始终一致 系统服务流程 系统 配置 安装
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • rabbitmq 的 REST API

    有没有办法从 ajax 向 RabbitMQ 发送数据 我的应用程序由数千个 Web 客户端 用 js 编写 和 WCF REST 服务组成 现在我试图弄清楚如何为我的应用程序创建可扩展点 这个想法是有一个rabbitmq实例 它从放置在一
  • 如何使用 XmlSerializer 在大文档中插入节点

    我有一个很大的 XML 文档 我想使用XmlSerializer类来插入新元素 其内容来自使用 xsd exe 生成的 NET 类实例 这是问题的后续如何使用 XmlSerializer 反序列化大型文档中的节点 https stackov
  • 如何衡量字符串的复杂度?

    我有一些长字符串 1 000 000 个字符 每个字符串仅包含定义字母表中的符号 例如 A 1 2 3 示例字符串 string S1 1111111111 meta complexity 0 string S2 1111222333 me
  • SvcUtil.exe 与添加引用

    当 VS NET 中的 添加服务引用 提供了您需要的所有代理类时 为什么有人会使用 SvcUtil exe 有时在 VS 中添加服务引用无法创建有用的代理 相反 它为您提供了一个空的 Reference cs 详细信息here https
  • 文件是通过 Visual Studio 下载的,但不是通过 .exe 下载的

    当我尝试下载 a 时出现以下错误 pdf通过我的网址从文件 exe file 服务器违反了协议 部分 响应头 详细信息 CR 后必须跟 LF 但当我尝试从 Visual Studio 调试代码时 也会下载同样的内容 我完全迷失了 不知道发生
  • xmlns 元素的顺序重要吗

    我不知道如何在 google 中搜索此内容 但是 xmlns 元素的问题在 XML 文件中重要吗 我正在 ASP NET VB 中使用 XMLWriter 创建一个 XML 文件 并且尝试匹配我提供的示例
  • Thread.sleep vs Monitor.Wait vs RegisteredWaitHandle?

    以下项目有不同的目标 但我很有趣知道它们如何 暂停 问题 Thread sleep 它会影响系统性能吗 它是否会占用线程的等待时间 关于什么Monitor Wait 他们 等待 的方式有何不同 他们的等待会占用一个线程吗 关于什么Regis
  • C# Winform - 当用手指在触摸屏上移动到控件末尾时如何防止移动整个窗口

    我正在开发用于触摸屏的全屏 winform 应用程序 当我在表单上有任何控件时 例如listbox webBrowserControl 它具有可见的滚动条 有要滚动的内容 当我用手指移动到控件的末尾时 完整的表单向上 向下移动取决于移动方向
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime

随机推荐

  • 若依框架学习(五)用户的增删改查

    点击部门树状图来进行条件查询 前端找到对应的页面 按照路由路径 里面有个handleNodeClick 点击事件 点进去看看 发现是复用了getList 方法 说明后台也是复用相应的方法 获取用户列表 PreAuthorize在调用方法前先
  • <链表>找到链表中的中心点

    找到链表中的中心点 奇数 m 2 n mid n 1 思想是确定当前共有多少个节点 当节点个数多时不能采用遍历直到指针域指向空的方法o n 快慢指针 两个指针从起点开始移动 A走两个节点 B走1个节点 当A走到终点时B走到中点 循环退出条件
  • Linux系统下远程连接mysql出错-2003 -Can't connect to MySQL server on 'ip' (10060 "Unknown error")

    第一步 首先检查mysql配置文件里面是否设置了默认连接地址 默认端口号 bind address 0 0 0 0 port 3306 然后发现并没有 第二步 输入密码进入mysql数据库 mysql u root p 设置主机权限 并设置
  • 泰拉瑞亚显示已连接服务器失败,打开泰拉瑞亚提示网络异常或者连接不上

    泰拉瑞亚这款游戏相信大家都不陌生吧 最近小编经常收到打开泰拉瑞亚提示网络异常或者连接不上问题的反馈 接下来小编就为大家提供几种常见的处理方案 泰拉瑞亚游戏简介 泰拉瑞亚 Terraria 人气像素游戏 登陆 Android 平台 它被玩家戏
  • PDF复制文字到Word出现空格、换行等格式调整

    文章目录 WORD内批量替换 QQ文字识别 推荐 PDF复制到word后出现大量空格 换行 难以一个个调整 下面结束两种批量处理的方法 建议将PDF复制的内容在新word文档中调整好后再粘贴到需要的文档中 不然一不小心就把之前的内容全部替换
  • Zookeeper 客户端之基本操作指令

    ZooKeeper命令行工具类似于Linux的shell环境 不过功能肯定不及shell啦 但是使用它我们可以简单的对ZooKeeper进行访问 数据创建 数据修改等操作 命令行工具的一些简单操作如下 zkCli sh客户端连接命令 ls
  • Spring5的总体架构图

    Spring5的主体架构图 主要是四大部分 Web Data Access Integration Core Container 中间层 具体见下图 转载于 https www cnblogs com love jk p overall h
  • @TableField介绍和使用

    1 TableField exist false 注解加载bean属性上 表示当前属性不是数据库的字段 但在项目中必须使用 这样在新增等使用bean的时候 mybatis plus就会忽略这个 不会报错 否则会报一个如下的异常 Error
  • okhttp3.0忽略https证书

    okhttp的基本使用网上很多 可以自己找到很多例子 最近有个项目需要https 进行验证发送请求回来error 提示 host not vertify 琢磨了半天 最后是需要将证书认证忽略 那就开始构建一个SSL来信任所有的证书 忽略证书
  • Swin-Transformer-Semantic-Segmentation训练自己的数据集

    论文地址 源码 1 按照作者的步骤安装好所需的环境 2 安装可以运行一下demo看环境是否搭建成功 3 准备好自己的数据集 我用的是VOC数据集 4 修改confis base datasets pascal voc12 py 5 修改mm
  • [Spring Boot]12 ElasticSearch实现分词搜索功能

    目录 一 前言 二 搜索功能的需求 三 需求开发 1 服务器安装ElasticSearch和IK分词器 2 需求开发 1 pom xml引入jar包 2 yml增加配置 3 配置类ElasticsearchConfig 4 工具类Elast
  • C语言详解系列——循环语句详解(3)do while语句的语法结构

    文章目录 do while语句 do while语句中的break和continue break continue do while语句与while语句的不同点 简单练习 do while语句 之前的学习中我们已经了解到了while 语句和
  • 算法:单调队列

    队列 先进先出 题型 滑动窗口 求滑动窗口里的最大 或最小 值 例1 P1886 滑动窗口 模板 单调队列 求滑动窗口里的最大小值 include
  • csdn添加可跳转的文章目录连接

    一篇文章最好只有一个目录 toc 这是文章标题 toc 自定义标题 自定义标题这样写
  • CentOs安装Redis

    一提到Redis 相信大家都不会感到陌生吧 今天就让我们在阿里云上安装一下Redis 为以后使用它做个准备 一 下载 1 下载页面 https redis io 2 下载 wget http download redis io releas
  • c++构造函数

    建立一个对象时 通常最需要立即做的工作是初始化对象 如对数据成员赋初值 构造函数就是用来用来在创建对象时初始化对象 为对象数据成员赋初始值 类的数据成员是不能在类定义时初始化的 原因是类定义并没有产生一个实体 而是给出了一个数据类型 不占用
  • RBF应用实例

    RBF网络能够逼近任意的非线性函数 可以处理系统内的难以解析的规律性 具有良好的泛化能力 并有很快的学习收敛速度 已成功应用于非线性函数逼近 时间序列分析 数据分类 模式识别 信息处理 图像处理 系统建模 控制和故障诊断等 简单说明一下为什
  • misc和crtpto一些刷题(nssctf)

    misc Spectre 将音频放进audacity 一下出 utflag sp3tr0gr4m0ph0n3 crypto SWPUCTF 2022 新生赛 什锦 一眼猪圈密码 找个在线解密解一下 http www hiencode com
  • Centos7 安装Python3和scrapy(正确安装姿势)

    苦逼的前夜 昨晚很辛苦 搞到晚上快两点 最后还是没有把python3下的scrapy框架安装起来 后面还把yum这玩意给弄坏了 一直找不到命令 今天早上又自己弄了快一上午 又求助 函兮 弄了快一个中午 最后无奈还是没有弄好yum跟pytho
  • Blazor 路由及导航开发指南

    翻译自 Waqas Anwar 2021年4月2日的文章 A Developer s Guide To Blazor Routing and Navigation 1 检查传入的请求 URL 并将它们导航到对应的视图或页面是每个单页应用程序