我正在尝试创建一些关于库中方法调用持续时间的统计信息.我想创建一个执行这些重复步骤的通用操作和函数,而不是将每个方法调用包装到包含时间线的库并跟踪它.
例如,对于不返回值的方法,我创建了这个:
private readonly Action<string, Action> timedAction = (name, action) =>
{
var sw = Stopwatch.StartNew();
action.Invoke();
trackDuration(name, sw.ElapsedMilliseconds);
};
Run Code Online (Sandbox Code Playgroud)
可以调用timedAction("methodname", () => lib.methodname())
.
我想为返回值的方法做类似的事情,但显然Action
不能用于此目的,因为它不能返回值.
有没有办法用泛型来做到这一点Func
,所以我不必为每个库方法参数组合声明一个?
我是OOP的新手,多态性让我很难过:
class Animal
{
public virtual void eat()
{
Console.Write("Animal eating");
}
}
class Dog : Animal
{
public override void eat()
{
Console.Write("Dog eating");
}
}
class Program
{
public void Main()
{
Animal dog = new Dog();
Animal generic = new Animal();
dog.eat();
generic.eat();
}
}
Run Code Online (Sandbox Code Playgroud)
这样打印
Dog eating
Animal eating
Run Code Online (Sandbox Code Playgroud)
但是为什么不使用Dog类型代替动物,比如Dog dog = new Dog()?当你知道这个物体是一种动物,但我不知道它是什么样的动物时,我认为这很方便.请向我解释一下.
谢谢
通过在.NET中加载ECC私钥,我能够将ECC私钥加载到.NET Core 3中,并执行签名任务。
但是,我遇到了一个不能由加载的密钥ECDSA.ImportPrivateKey
。奇怪的是,通过将其openssl
更改为.NET Core 3 可以理解的键字节来进行查看。
导入失败的私钥的代码(这是失败的实际密钥):
ecdsa = ECDsa.Create();
var pem = "MHYCAQEEH5t2Xlmsw5uqw3W9+/3nosFi6i3V901uW6ZzUpvVM0qgCgYIKoZIzj0DAQehRANCAASck2UuMxfyDYBdJC0mHNeToqMBhJuMZYSgkUNbK/xzD7e3cwr5okPx0pZdSMfDmyi1dBujtIIxFK9va1bdVAR9";
var derArray = Convert.FromBase64String(pem);
ecdsa.ImportECPrivateKey(derArray, out _);
Run Code Online (Sandbox Code Playgroud)
该ImportECPrivateKey
呼叫失败,System.Security.Cryptography.CryptographicException : ASN1 corrupted data
内部System.Security.Cryptography.EccKeyFormatHelper.FromECPrivateKey(ReadOnlyMemory`1 keyData, AlgorithmIdentifierAsn& algId, ECParameters& ret)
原始PEM文件如下所示:
$ cat private_key_cert_265.pem
-----BEGIN EC PRIVATE KEY-----
MHYCAQEEH5t2Xlmsw5uqw3W9+/3nosFi6i3V901uW6ZzUpvVM0qgCgYIKoZIzj0D
AQehRANCAASck2UuMxfyDYBdJC0mHNeToqMBhJuMZYSgkUNbK/xzD7e3cwr5okPx
0pZdSMfDmyi1dBujtIIxFK9va1bdVAR9
-----END EC PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
openssl将私钥转换为其他内容:
$ openssl ec -in private_key_cert_265.pem
read EC key
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIACbdl5ZrMObqsN1vfv956LBYuot1fdNblumc1Kb1TNKoAoGCCqGSM49 …
Run Code Online (Sandbox Code Playgroud) 我正在实施一个程序,该程序充当某些现有软件的客户端。该协议是使用XML
模式定义的,它包括多维数组。
.netXmlSerializer
无法处理这些 -这是一个已知问题。
有没有办法扩展XmlSerializer
以便我可以对此进行处理,或者是否有完整的(免费或商业的)替代品XmlSerializer
可以处理多维数组?
SharpSerializer
似乎没有创建模式定义的 XML,而是使用它自己的序列化格式。
我想我可以sgen.exe
用来生成序列化程序代码,然后手动编辑它以添加必要的处理,但我想避免这种情况。
我正在尝试使用Azure Active Directory图谱API(使用Azure GraphClient nuget包)在Azure AD中创建新应用程序.
我使用现有的AAD应用程序进行了身份验证,因此我对该目录具有写入权限.
但是,在创建新的应用程序对象时,Azure Graph API会返回以下错误:
{"odata.error": {
"code":"Request_BadRequest",
"message": {
"lang":"en",
"value":"Property value cannot have duplicate id or claim values."
},
"values":
[{
"item":"PropertyName",
"value":"None"
},
{
"item":"PropertyErrorCode",
"value":"DuplicateValue"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
它没有说明哪个属性具有重复的id或声明值 - 错误消息中有两个空格,就好像缺少名称一样.
创建Application对象的代码是这样的:
var appname = "Test Application create " + DateTime.Now.Ticks;
var application = new Application()
{
AvailableToOtherTenants = false,
DisplayName = appname,
ErrorUrl = null,
GroupMembershipClaims = null,
Homepage = "http://www.domain.com",
IdentifierUris = new List<string>() {{"https://domain.com/"+ appname } }, …
Run Code Online (Sandbox Code Playgroud) 我正在使用Azure Function App(v2),该程序在同一Function App中具有许多不同的功能。
它将被部署在多个Azure区域中,我想添加一个自定义标头,以指示哪个区域满足了请求。
我知道我可以让每个函数返回HttpResponseMessage
包含自定义标头的函数。我不想将代码复制到每个功能中,而是希望将其集中在整个Function App项目中。返回的另一个缺点HttpResponseMessage
是我想使用IActionResult
,因此可以使用JsonResult
或OkObjectResult
和类似的返回类型。
对于ASP.NET MVC项目,我可以添加一个添加了标题的中间件,或者使用来添加标题web.config
。在功能应用程序中似乎都不可行。
如何做到这一点而不必HttpResponseMessage
在每个函数的Run
方法内返回并添加标头?
我有一个 ECC 私钥和一个包含公钥的证书文件。我可以以 PEM 或 DER 格式获取它们。
我可以X509Certificate
使用以下代码将证书读入:
var certbytes = File.ReadAllBytes("certificate.pem");
var cert = new X509Certificate2(certbytes);
Run Code Online (Sandbox Code Playgroud)
但我无法加载私钥。我试过这个代码:
var keyContent = File.ReadAllBytes("certificate_private_key.pem");
var key = CngKey.Import(keyContent, CngKeyBlobFormat.EccPrivateBlob);
Run Code Online (Sandbox Code Playgroud)
它抛出Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'An error occurred during encode or decode operation'
.
我还尝试了该CngKeyBlobFormat
参数的其他值。Import 方法也失败了。
openssl 可以读取该文件,并输出有关它的以下信息:
var certbytes = File.ReadAllBytes("certificate.pem");
var cert = new X509Certificate2(certbytes);
Run Code Online (Sandbox Code Playgroud)
.NET 或 .NET Core 中是否有可以执行此操作的内置 API?或者是否有可以做到这一点的 3rd 方图书馆,以及如何做到这一点?
使用新的 SDK 样式 csproj 格式时,可以使用<targetframeworks>
分号分隔的目标框架列表元素来构建项目。
这会导致构建输出文件夹中的每个目标框架都有一个子文件夹:
但是,当在 msbuild 命令行上传递 OutDir 属性时,它不会创建子文件夹,并且构建的程序集都放置在同一文件夹中。
命令行有效,但不允许输出位置:
msbuild projectfile.csproj
选择输出目录,但将构建的程序集放在同一文件夹中的命令行(有效地覆盖首先构建的目标框架程序集):
msbuild projectfile.csproj /p:OutDir=buildtemp
有没有办法将构建输出放置在非默认文件夹中,同时仍保留 targetframwork 子文件夹?
我正在将一些数据从 MS SQL Server 数据库导出为 JSON。
有两张表,从表A到表B都有外键。是0多关系,即。表 A 中的一条记录可能在表 B 中有一些数据,但不是必须的。表 A 包含人员记录,表 B 是他们当前和以前的地址的列表。
我使用此语句来获取 JSON 数据:
SELECT
A.Firstname,
A.LastName,
HistoricAddresses.AddressLine1
HistoricAddresses.AddressLine2
FROM
People A
LEFT JOIN
HistoricAddresses ON HistoricAddresses.PeopleId = A.Id
FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)
这会产生如下所示的 JSON 结构:
[
{
"Firstname": "xyz",
"Lastname": "xyz",
"HistoricAddresses": [
{
"AddressLine1": "abc",
"AddressLine2": "abc"
},
// more historic address records follow
]
},
// more records follow
]
Run Code Online (Sandbox Code Playgroud)
这一切都很好,直到 A 表中的一条记录在 B 表中没有任何记录为止。在这种情况下,JSON 如下所示:
[
{
"Firstname": "xyz",
"Lastname": "xyz",
"HistoricAddresses": [ …
Run Code Online (Sandbox Code Playgroud) 我有一个带有 Web 应用程序警报规则的 ARM 模板,我希望能够在其中配置哪些电子邮件收到警报。
电子邮件警报操作的片段如下:
"action": {
"odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
"sendToServiceOwners": false,
"customEmails": [
"email1@example.com",
"email2@example.com"
]
}
Run Code Online (Sandbox Code Playgroud)
相同的模板用于设置生产、测试和开发环境。所以我想使用一个参数来进行电子邮件警报。
"customEmails"
如何基于逗号分隔字符串或数组类型参数生成用作属性的数组?
我已经尝试过了"customEmails": "[array(parameters('AlertEmailRecipients'))]"
,也
"customEmails": [
[array(parameters('AlertEmailRecipients'))]
]
Run Code Online (Sandbox Code Playgroud)
但两者都不起作用。我不知道如何告诉它“customEmails”属性值应该来自参数。
c# ×6
azure ×2
cryptography ×2
.net ×1
arrays ×1
generics ×1
json ×1
msbuild ×1
oop ×1
polymorphism ×1
sql-server ×1
xml ×1
xsd ×1