我在适用于 Linux 的 Azure 应用服务上部署了一个 ASP.Net 核心网站。
在控制器中,我正在尝试获取客户端证书,如下所示:
var callerCertificate = Request.HttpContext.Connection.ClientCertificate;
Run Code Online (Sandbox Code Playgroud)
我总是callerCertificate为空。我试过await Request.HttpContext.Connection.GetClientCertificateAsync()同样的结果null。
我的网站虚拟主机创建如下所示:
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseStartup<Startup>()
.UseSerilog();
Run Code Online (Sandbox Code Playgroud)
我还为网站(在 Azure 中)设置了 SSL 设置,如下所示:
客户端调用方是一个 net462 项目,用于Microsoft.Rest.CertificateCredentials将证书设置为 HTTP 请求。
var cred = new CertificateCredentials(_deviceCertificate)
...
await this.cred.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud) 这是我的场景:
问题:部署后,始终对azure函数的第一个触发器失败.如果appsetting是IsNullOrWhiteSpace,它会因为我抛出的ConfigurationErrorsException异常而失败.在第一次失败的触发器后大约一分钟后,所有后续触发器开始成功.
是否需要时间让appsettings加载?你们有没有遇到过这样的问题?解决方法/解决方案是什么?
我正在使用azure-event-hubs-go客户端从Azure IoTHub读取事件。我正在创建一个事件处理器主机,并提供一个处理事件的处理程序(如https://github.com/Azure/azure-event-hubs-go中的示例所示)。
如何设置事件处理器主机从当前时间开始接收事件?我看不到任何类似InitialOffsetProvider的选项来手动设置偏移量。
这类似于如何设置EventProcessorHost从现在开始读取事件(UTC)?但这是专门针对Go客户端的。
我有一个 Asp.net API 网站,它执行自定义客户端证书验证。在 IIS 10 上托管此网站时,当我调用 API 时,我会从失败的请求日志中获取以下信息。
证书链已处理,但终止于信任提供者不信任的根证书。
我的 web.config 有
<configuration>
<system.webServer>
<access sslFlags="Ssl, SslRequireCert" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
在 applicationHost.config 我有
<section name="access" overrideModeDefault="Allow" />
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?如何将 IIS 配置为仅传递证书而不验证它?
我想要这样做的原因是,这是一个测试环境,我想信任所有使用自签名证书调用我的 API 的客户端。我将在 API 内部验证证书。
注意:我在 Azure AppService 上托管相同的网站,并将“传入客户端证书”设置为ON。它就像一个魅力。那么,当我将其托管在我的机器 IIS 上时有什么区别?
我有一个方法:
public class MyClass
{
public ILogger _logger;
public async void TestLogMethod(string msg)
{
await Task.Run(async ()=> await _logger.Log(msg));
}
}
Run Code Online (Sandbox Code Playgroud)
和一个测试用例:
[Test]
public async Task TestLogMethod_LogMessage_Test()
{
var fakeLogger = A.Fake<ILogger>();
var testClass = new MyClass();
testClass._logger = fakeLogger;
testClass.TestLogMethod("Test Message");
A.CallTo(() => fakeLogger.Log(A<string>._)).MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)
MustHaveHappened断言总是失败说
以下调用的断言失败:
MyClass.TestLogMethod <System.Object>(<Ignored>)
预期至少找到一次但没有对伪对象进行调用.
很明显,_logger.Log()被调用,但为什么Asserting总是在这里失败?
c# ×3
azure ×2
appsettings ×1
asp.net ×1
asp.net-core ×1
deployment ×1
fakeiteasy ×1
go ×1
iis-10 ×1
nunit ×1