You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将.NET HTTPListener的认证方案选择逻辑转换为PowerShell代码

问题描述

我一直在使用PoSHServer搭建报表展示网站,运行十分顺畅。现在想给网站扩展少量API功能,但因为服务器启用了认证机制,功能无法按预期工作。

该服务器基于.NET的HTTPListener构建,官方文档仅提供C#示例。根据微软文档,需要在启动监听器前设置AuthenticationSchemeSelectorDelegate,对应的C#示例代码如下:

// 指定认证委托
listener.AuthenticationSchemeSelectorDelegate = 
new AuthenticationSchemeSelector(AuthenticationSchemeForClient);

对应的方法定义:

static AuthenticationSchemes AuthenticationSchemeForClient(HttpListenerRequest request)
{
    Console.WriteLine("正在选择客户端认证协议...");
    // 不对本地机器请求进行认证
    if (request.RemoteEndPoint.Address.Equals(IPAddress.Loopback))
    {
        return AuthenticationSchemes.None;
    }
    else
    {
        return AuthenticationSchemes.IntegratedWindowsAuthentication;
    }
}

我无法将这段代码转换为PowerShell,希望能得到帮助。


PowerShell 转换实现

在PowerShell中,可以直接用脚本块创建对应委托,无需单独定义方法,以下是转换后的代码:

# 假设$listener是已初始化的HTTPListener实例
$listener.AuthenticationSchemeSelectorDelegate = {
    param([System.Net.HttpListenerRequest]$request)
    
    Write-Host "正在选择客户端认证协议..."
    # 判断是否为本地请求
    if ($request.RemoteEndPoint.Address -eq [System.Net.IPAddress]::Loopback) {
        return [System.Net.AuthenticationSchemes]::None
    }
    else {
        return [System.Net.AuthenticationSchemes]::IntegratedWindowsAuthentication
    }
}

关键说明

  • PowerShell脚本块会自动适配AuthenticationSchemeSelector委托类型,无需手动实例化
  • 通过param定义输入参数,对应C#方法的HttpListenerRequest参数
  • 使用.NET类型的静态成员访问枚举值和回环地址,语法与C#逻辑一致但更简洁

内容的提问来源于stack exchange,提问作者Marc H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:06:22