<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lxf310的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lxf310</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lxf310]]></copyright><item><title><![CDATA[.NET中的Kerberos验证与SPN设置]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/127376114</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/127376114</guid><author>lxf310</author><pubDate>Mon, 17 Oct 2022 21:42:47 +0800</pubDate><description><![CDATA[.NET应用程序中涉及的Kerberos验证浅析]]></description><category></category></item><item><title><![CDATA[Angular单元测试小记 -- Karma + Jasmine]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/124842406</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/124842406</guid><author>lxf310</author><pubDate>Wed, 18 May 2022 21:29:53 +0800</pubDate><description><![CDATA[简单的讲Jasmine是一个用于编写JavaScript单元测试的框架，Karma则为Jasmine提供了运行环境。

配置Karma

1. 在karma.conf.js中添加如下配置


...
browsers: ['Chrome'],
customLaunchers: {
  ChromeHeadlessCI: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox']
  }
},
restartOnFileChange: true
...
]]></description><category></category></item><item><title><![CDATA[从前序遍历和中序遍历构造二叉树（Java）]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/121585771</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/121585771</guid><author>lxf310</author><pubDate>Sat, 27 Nov 2021 23:46:40 +0800</pubDate><description><![CDATA[public class MyTree {
    class TreeNode {
        public TreeNode left;
        public TreeNode right;
        public int value;

        public TreeNode(int v) {
            value = v;
            left = null;
            right = null;
        }
    }

.]]></description><category></category></item><item><title><![CDATA[二叉树遍历：递归 + 非递归 （Java）]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/121580598</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/121580598</guid><author>lxf310</author><pubDate>Sat, 27 Nov 2021 17:35:14 +0800</pubDate><description><![CDATA[import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class Tree {
    class TreeNode {
        public TreeNode left;
        public TreeNode right;
        public int value;

        public TreeNode(int v) {
            val.]]></description><category></category></item><item><title><![CDATA[如何利用C#在内存中生成zip文件并保存]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/120070723</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/120070723</guid><author>lxf310</author><pubDate>Thu, 02 Sep 2021 21:57:47 +0800</pubDate><description><![CDATA[using System;
using System.Drawing.Imaging;
using System.IO;
using System.IO.Compression;
...
public void MyZipMethod()
{
    try{
        using (var memoryStream = new MemoryStream())
        {
            using (var archive = new ZipArchive(memoryStream.]]></description><category></category></item><item><title><![CDATA[如何在.NET Framework应用程序中使用HttpClientFactory]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/117430924</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/117430924</guid><author>lxf310</author><pubDate>Mon, 31 May 2021 22:33:06 +0800</pubDate><description><![CDATA[当我们搜索HttpClient的最佳实践时会发现，HttpClient
]]></description><category></category></item><item><title><![CDATA[如何使用.NET操纵SharePoint站点]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/117392387</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/117392387</guid><author>lxf310</author><pubDate>Sat, 29 May 2021 23:32:11 +0800</pubDate><description><![CDATA[本文将示例如何使用PnP.Framework实现一个y
]]></description><category></category></item><item><title><![CDATA[Microsoft Bot Framework SDK小记]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/113665214</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/113665214</guid><author>lxf310</author><pubDate>Sat, 29 May 2021 22:04:09 +0800</pubDate><description><![CDATA[聊天机器人（Bot）可谓时下较为火热的话题之一，为了追赶一下潮流，本文将简要介绍一下如何利用Microsoft Bot Framework实现一个基于Microsoft Teams的聊天机器人。本文的示例代码使用.Net Framework 4.6.1、Microsoft.Bot.Builder 4.11.1以及Microsoft.Bot.Builder.Integration.AspNet.Web4.11.1。

1. 注册Bot

首先我们需要在Azure Bot Service上注册一个Bot，并上.]]></description><category></category></item><item><title><![CDATA[利用LINQ实现简单的异步并发]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/116651983</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/116651983</guid><author>lxf310</author><pubDate>Tue, 11 May 2021 14:28:48 +0800</pubDate><description><![CDATA[在.NET应用程序的开发过程中，处于性能考虑，我们可能需要多个互不相关的异步作业同时执行。此时我们可能会想到利用Parallel.ForEach函数，但倘若这些作业是有返回值的，而且我们需要将这些返回值收集起来，那么我们就会需要利用await/async操作，然后目前基本的Parallel.ForEach函数并不支持await/async操作。因此，我们需要另辟蹊径，比如Task.WhenAll。本文的示例代码的实现思路分为两步，一是将完整的作业集分割成若干个子集，之后利用LINQ的Select函数未子集中]]></description><category></category></item><item><title><![CDATA[C#自定义配置小记]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/113625289</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/113625289</guid><author>lxf310</author><pubDate>Thu, 04 Feb 2021 11:44:48 +0800</pubDate><description><![CDATA[我们在设计与实现一个应用程序时，往往会将一些常量写入配置文件当中，并且希望这些常量作为一个结构体被整体读写。对此，C#提供的System.Net.Configuration可以帮我们轻松的实现这个需求。本文将介绍几种常见的使用常见及实现，样例代码为.NET framework 4.6.1的控制台程序（如ConfigDemo），配置文件名为App.config。

1. Key-Value配置项

对于一些简单的配置项，我们可以直接将其存储在configuration文件中提供的appSettings当中，该]]></description><category></category></item><item><title><![CDATA[Microsoft Graph小记之应用开发]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/112756353</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/112756353</guid><author>lxf310</author><pubDate>Sun, 17 Jan 2021 20:23:43 +0800</pubDate><description><![CDATA[在Microsoft Graph小记之身份验证一文中，笔者介绍了在利用Microsoft Graph进行开发时，如何解决身份验证及授权的问题。本文将接着介绍，如何利用前文中实现的IAuthenticationProvider接口类完成业务逻辑需求开发。

1. Graph客户端初始化

为了能够调用实际的Graph SDK Methods/API来实现所需的业务逻辑，用户首先需要利用自定义的IAuthenticationProvider接口实现类初始化一个GraphServiceClient实例。


pu]]></description><category></category></item><item><title><![CDATA[Microsoft Graph小记之身份验证]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/112726079</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/112726079</guid><author>lxf310</author><pubDate>Sun, 17 Jan 2021 00:09:26 +0800</pubDate><description><![CDATA[Microsoft Graph是一种可以让用户访问 Microsoft 云服务资源（如Microsoft 365）的 REST 风格的 Web API，用户可以通过直接发送HTTP请求或Graph SDK来使用这些接口。本文将介绍如何利用Graph SDK来向服务器提供身份验证信息，以获取所需操作的必要权限。

1. 创建App Registration

为了能够访问Graph，用户首先需要通过https://portal.azure.com创建一个app registraion，以使应用能够与 Micr]]></description><category></category></item><item><title><![CDATA[.Net Web Api过滤器小记]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/109544762</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/109544762</guid><author>lxf310</author><pubDate>Sat, 07 Nov 2020 13:02:58 +0800</pubDate><description><![CDATA[Web Api的过滤器（Filter）使用的面向切面（Aspect Oriented Programming）的编程思想，该机制使得编程人员可以很方便的向Web Api的主逻辑中添加一些额外的逻辑，比如身份验证预授权、数据模型验证以及格式化异常处理等。

在实际编程实现中，过滤器其实就是作用于Web Api Controller的一个或多个Action之上的Attribute。以下是比较常用的可供实现自定义过滤器的接口和类。

接口
			类
			简介
		IActionFilter
			ActionF]]></description><category></category></item><item><title><![CDATA[使用log4net实现文本日志]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/109037268</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/109037268</guid><author>lxf310</author><pubDate>Mon, 12 Oct 2020 22:36:01 +0800</pubDate><description><![CDATA[log4net库是一个帮助程序员输出日志状态的工具，本文简介如何使用该库为.NET应用程序添加日志。

1. 安装及配置

首先，在创建好相关的应用程序后，我们可以利用NuGet manager来为其安装log4net package， 本文是示例中安装的是2.0.8。

其次，我们需要在StartUp项目中创建log4net所需的配置，最简便的方式是将这些配置项直接添加到应用程度的App.config（控制台程序）或Web.config（Web API程序）中，比如：


&lt;configuratio]]></description><category></category></item><item><title><![CDATA[Swagger简易教程——Swashbuckle版]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/109015144</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/109015144</guid><author>lxf310</author><pubDate>Sun, 11 Oct 2020 21:02:05 +0800</pubDate><description><![CDATA[Swagger 是一个可用于生成、描述、调用和可视化 RESTful 风格的 Web 服务的规范和框架。本文将介绍如何使用Swashbuckle为你的Web API应用程序添加Swagger说明文档。

目录

准备

实用配置

1. 利用XML备注生成说明文档

2. 利用Swagger属性标签进一步丰富文档

3. 为从Request中直接获取的输入添加文档

4. 自定义Swagger的文档路径

准备

本文的示例代码使用了.NET Framework 4.6.1。首先，创建一个新的Web API]]></description><category></category></item><item><title><![CDATA[如何在.Net中利用HttpClient发送HTTP请求]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/108889977</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/108889977</guid><author>lxf310</author><pubDate>Wed, 30 Sep 2020 21:40:16 +0800</pubDate><description><![CDATA[初始化

发送HTTP请求

单元测试

初始化

HttpClient位于System.Net.Http命名空间下，用于发送 HTTP 请求和接收来自通过 URI 确认的资源的 HTTP 响应。HttpClient设计意旨可共享实例，且在使用得当的情况下其实例是线程安全的。对于服务器端应用程序而言，如若为每个HTTP请求均创建一个新的HttpClient实例，则在系统压力较高的情况下可能造成socket端口被耗尽，并导致SocketException。所以，比较推荐的使用方式是利用static关键字创建一]]></description><category></category></item><item><title><![CDATA[Azure Service Bus (服务总线) 入门]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/107386920</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/107386920</guid><author>lxf310</author><pubDate>Sat, 18 Jul 2020 16:50:34 +0800</pubDate><description><![CDATA[Azure Service Bus是一种完全托管的企业集成消息中转站，可以帮助开发人员轻松地分离应用程序和服务，从而可以专注于面向具体业务逻辑的应用程序的设计和开发。 同时，服务总线还为异步传输数据和状态提供可靠且安全的平台。本文将介绍如何使用.NET通过Service Bus进行应用程序开发，以及如何授权本地应用程序访问所需的Service Bus服务。
...]]></description><category></category></item><item><title><![CDATA[如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/107099065</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/107099065</guid><author>lxf310</author><pubDate>Sat, 11 Jul 2020 23:55:58 +0800</pubDate><description><![CDATA[准备

若没有供实验的数据，可以使用Microsoft SQL Server Management Studio通过先创建一个本地数据库，如命名为ef-demo。再使用以下SQL创建一些数据表。


USE [ef-demo]
GO

CREATE TABLE [dbo].[Identities] (
    [Id] BIGINT NOT NULL,
    [NickName] NVARCHAR (200) NOT NULL,
    [PhoneNumber] NVARCHAR (200) NOT N]]></description><category></category></item><item><title><![CDATA[ASP.NET Web API 路由小记]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/106421852</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/106421852</guid><author>lxf310</author><pubDate>Fri, 29 May 2020 15:53:38 +0800</pubDate><description><![CDATA[目录

创建ASP.NET Web API应用程序

路由表

属性路由

创建ASP.NET Web API应用程序

在Visual Studio 2019中，可以通过选择新建“ASP.NET Web Application (.NET Framework)”来创建一个新的Web API应用程序。通常本人会选择Empty模板，之后勾选"Web API"选项进行创建。



在创建好的应用程序中，右键点击Controllers文件夹创建一个Controller类。







路由表

在ASP.NE.]]></description><category></category></item><item><title><![CDATA[Entity Framework 6 DB-First入门]]></title><link>https://blog.youkuaiyun.com/lxf310/article/details/106409942</link><guid>https://blog.youkuaiyun.com/lxf310/article/details/106409942</guid><author>lxf310</author><pubDate>Thu, 28 May 2020 19:34:14 +0800</pubDate><description><![CDATA[目录



创建一个数据库

创建一个应用程序并反向链接数据库

向数据库中读写数据

如何向数据库中添加新的数据表

如何将外键关系转换为继承关系

创建一个数据库

在实验开始之前，我们需要有一个已经存在的数据库。此处可以通过Microsoft SQL Server Management Studio连接本地SQL Server来创建一个全新的数据库，本地SQL Server连接方法如图所示。



新建数据库，并利用如下SQL脚本创建一个数据表。


CREATE TABLE [dbo].[Iden.]]></description><category></category></item></channel></rss>