小编Sho*_*nte的帖子

在 .NET Core 中使用环境变量指定布尔变量

鉴于以下程序:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((builderContext, config) =>
                {
                    var env = builderContext.HostingEnvironment;
                    config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
                        .AddEnvironmentVariables(prefix: "Prefix_");
                })
                .UseStartup<Startup>();
    }
Run Code Online (Sandbox Code Playgroud)

和配置通常定义appsettings.json为:

{
    "SomeSection": {
        "SomeOption": true
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将它覆盖为环境变量(使用文档中指定的方法)?


我试过(我在 macOS 上,但同样的问题也发生在 Linux 和 Docker Compose 中):

export Prefix_SomeSection__SomeOption=true
Run Code Online (Sandbox Code Playgroud)

但它被解析为一个字符串,它不能将其转换为布尔值。相同的方法适用于所有其他非布尔选项,这似乎暗示有一些未记录的方法将变量定义为布尔值。

c# .net-core asp.net-core

8
推荐指数
1
解决办法
5852
查看次数

C#不能使`notnull`类型为可空

我正在尝试创建类似于Rust Result或Haskell的类型,Either并且我已经做到了这一点:

public struct Result<TResult, TError>
    where TResult : notnull
    where TError : notnull
{
    private readonly OneOf<TResult, TError> Value;
    public Result(TResult result) => Value = result;
    public Result(TError error) => Value = error;

    public static implicit operator Result<TResult, TError>(TResult result)
        => new Result<TResult, TError>(result);

    public static implicit operator Result<TResult, TError>(TError error)
        => new Result<TResult, TError>(error);

    public void Deconstruct(out TResult? result, out TError? error)
    {
        result = (Value.IsT0) ? Value.AsT0 : (TResult?)null;
        error = (Value.IsT1) ? Value.AsT1 …
Run Code Online (Sandbox Code Playgroud)

c# generics type-constraints c#-8.0 nullable-reference-types

7
推荐指数
2
解决办法
235
查看次数

这种签名 URL 的实现是否相当安全?

我正在尝试实现签名 URL 以实现对静态文件的短期访问。这个想法是:

  • 生成带有过期时间戳的 URL(例如https://example.com/file.png?download=false&expires=1586852158
  • 使用 HMACSHA256 和共享密钥对其进行签名,并将签名附加在 URL 末尾(例如https://example.com/file.png?download=false&expires=1586852158&signature=6635ea14baeeaaffe71333cf6c7fa1f0af9f6cd1a17abb4e75ca275dec5906d1

当我在服务器上收到请求时,我取出signature参数并验证使用 HMACSHA256 签名的 URL 的其余部分以及相同的共享密钥是否会产生相同的签名。

实现如下:

    public static class URLSigner
    {
        private static string GetSignatureForUri(string uri, byte[] key)
        {
            var hmac = new HMACSHA256(key);
            var signature = hmac.ComputeHash(Encoding.UTF8.GetBytes(uri));
            var hexSignature = BitConverter.ToString(signature).Replace("-", string.Empty).ToLowerInvariant();
            return hexSignature;
        }

        public static string SignUri(string uri, byte[] key)
        {
            var hexSignature = GetSignatureForUri(uri, key);
            return QueryHelpers.AddQueryString(uri, new Dictionary<string, string> { { "signature", hexSignature }});
        }

        public static bool VerifyUri(string uri, …
Run Code Online (Sandbox Code Playgroud)

c# security signing hmac .net-core

6
推荐指数
1
解决办法
1723
查看次数

是否不可能有一个检查约束引用一个也有外键的列?

我在 MySQL 8 上尝试添加检查约束:

ALTER TABLE `table` ADD CHECK (
    (`column_a` IS NULL AND `column_b` IS NOT NULL) OR
    (`column_a` IS NOT NULL AND `column_b` IS NULL)
);
Run Code Online (Sandbox Code Playgroud)

但我不断收到此错误

列“column_b”不能用于检查约束“table_chk_1”:需要在外键约束“table_ibfk_2”引用操作中使用。

我在互联网上的其他任何地方都找不到对此错误的任何参考,我不明白问题是什么。无论column_acolumn_b也的外键与其它表,他们都是空。我只想确保中的每一行table都有一个引用 viacolumn_a或 via column_b

这个错误的原因是什么?


我试过什么

我试图删除外键,添加检查约束并成功。然后,如果我将外键添加回,column_b我仍然会收到相同的错误。

mysql sql check-constraints create-table mysql-8.0

5
推荐指数
1
解决办法
463
查看次数