小编Tar*_*rta的帖子

将 SSL 证书添加到 Docker Linux 容器

预期行为 能够从容器内进行 HTTPs 调用

实际行为

System.InvalidOperationException: IDX10803: Unable to obtain configuration from: 'https://identity.test/.well-known/openid-configuration'. ---> System.IO.IOException: IDX10804: Unable to retrieve document from: 'https://identity.test/.we
ll-known/openid-configuration'. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: SSL connect error
Run Code Online (Sandbox Code Playgroud)

信息 我认为问题是我的容器根本不知道此 http 调用需要使用的证书。所以我试图做的是通过 dockerfile 将它们提供给容器本身,如下所示:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

#Copy csproj and restore as distinct layers
COPY PublishOutput/. ./

FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app .

COPY Certificates/myCertificate.cer /usr/local/share/ca-certificates/myCertificate
RUN update-ca-certificates

ENTRYPOINT ["dotnet", "CaseApi.Web.dll"]
Run Code Online (Sandbox Code Playgroud)

PublishOutput文件夹中,我只拥有在 Docker 容器中运行所需的 …

ssl https certificate ssl-certificate docker

7
推荐指数
1
解决办法
4万
查看次数

使用Automapper进行自定义映射,其中目标中的字段是源中两个字段的串联

我认为这个标题已经很好地解释了这个问题.我有一个源类型:

public class Employee
{
    public string Name { get; set; }
    public string DateOfBirth { get; set; }
    public string srcImage { get; set; }
    public string Email { get; set; }
    public string Role { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class EmployeeViewModel
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public string DateOfBirth { get; set; }
    public string Email { get; set; }
    public string Role { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# converter automapper

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

在C#中进行改装和OAuth身份验证,为什么再次使用Http

我刚刚在GitHub上找到了Refit库(链接:https : //github.com/reactiveui/refit)。除了在这个庞大世界中迈出的第一步之外,我还试图理解为什么当我们需要对例如API服务进行http调用时,为什么使用该库而不是通常的HttpClient会很方便。通过阅读,我了解了由我们自己创建,设置标头和其他配置的httpClient的原因太旧且太低级了。那就是改装的地方。然后,我尝试前进一步,并阅读有关身份验证的部分。我注意到,根据该库的github页面,为了使身份验证有效,我们需要再次处理HttpClient。我们终于设法摆脱了困境。官方页面上显示的示例是:

class AuthenticatedHttpClientHandler : HttpClientHandler
{
    private readonly Func<Task<string>> getToken;

    public AuthenticatedHttpClientHandler(Func<Task<string>> getToken)
    {
        if (getToken == null) throw new ArgumentNullException("getToken");
        this.getToken = getToken;
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // See if the request has an authorize header
        var auth = request.Headers.Authorization;
        if (auth != null)
        {
            var token = await getToken().ConfigureAwait(false);
            request.Headers.Authorization = new AuthenticationHeaderValue(auth.Scheme, token);
        }

        return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
    }
}

class …
Run Code Online (Sandbox Code Playgroud)

c# authentication refit

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

在 Xunit 测试中使用 Moq 库模拟 HttpClient GetAsync

我正在为这个简单地调用外部 API 的小服务编写一个简单的单元测试:

public class ApiCaller : IApiCaller
{
    private readonly IHttpClientFactory _httpFactory;

    public ApiCaller(IHttpClientFactory httpFactory)
    {
        _httpFactory = httpFactory;
    }

    public async Task<T> GetResponseAsync<T>(Uri url)
    {
        using (HttpClient client = _httpFactory.CreateClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.Timeout = TimeSpan.FromSeconds(20);
            using (HttpResponseMessage response = await client.GetAsync(url))
            {
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();

                return JsonConvert.DeserializeObject<T>(responseBody);
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是:模拟并因此测试此类服务似乎不是很常见的做法,我想知道是否有一些具体的解释。

其次,我尝试编写一个简单的单元测试,但我无法模拟GetAsync调用,因为 HttpClient 没有实现任何接口。

public class ApiCallerTest
{
    private readonly ApiCaller _target;
    private readonly Mock<IHttpClientFactory> _httpClientFactory;


    public ApiCallerTest()
    {
        _httpClientFactory = …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq xunit asp.net-core

5
推荐指数
2
解决办法
3256
查看次数

将依赖注入应用于抽象类 c# 的不同实现

当我可以在我的控制器中注入抽象类的 2 个不同实现时,我想在我的 .net 核心应用程序中构建一个 MVC 场景。这些实现调用它们的外部相关 API。也许架构是错误的,因此我向您征求建议,但请先按照我的想法进行操作。我创建了一个通用抽象类。为什么要抽象?因为调用 API 的基本方式/属性对每个人都是一样的。就我而言,到目前为止我只有一个 HttpClient。

public abstract class ApiCaller
{
    protected static HttpClient client;
    protected static string ApiUrl;

    public ApiCaller(string apiUrl)
    {
        client = new HttpClient();
        ApiUrl = apiUrl;
    }

    public abstract string GetApiResultAsync();
}
Run Code Online (Sandbox Code Playgroud)

之后,我将拥有两个不同的类Api1ServiceApi2Service,它们扩展了ApiCaller,并且将有自己不同的调用相关 API 的方式。

public class Api1Service : ApiCaller
{
    public Api1Service(string apiUrl) : base(apiUrl)
    {

    }

    public override string GetApiResultAsync()
    {
        ...
    }
}


public class Api2Service : ApiCaller
{
    public Api2Service(string apiUrl) …
Run Code Online (Sandbox Code Playgroud)

c# api model-view-controller dependency-injection asp.net-core

2
推荐指数
1
解决办法
686
查看次数

在 Github 工作流程中的作业之间传递机密作为输出

我试图在作业之间传递 JWT 令牌,但有些东西阻止它正确传递。根据文档,如果我想在作业之间传递变量,我需要outputs按照此处的说明使用。我正在做的事情如下:

name: CI
on:
  pull_request:
    branches:
      - main
jobs:
  get-service-url:
    ...does something not interesting to us...
  get-auth-token:
    runs-on: ubuntu-latest
    outputs:
      API_TOKEN: ${{ steps.getauthtoken.outputs.API_TOKEN }}
    steps:
      - name: Get Token
        id: getauthtoken
        run: |
          API_TOKEN:<there is a full JWT token here>
          echo -n "API_TOKEN=$API_TOKEN" >> $GITHUB_OUTPUT
  use-token:
    runs-on: ubuntu-latest
    needs: [get-service-url,get-auth-token]
    name: Run Tests
    steps:
      - uses: actions/checkout@v3
      - name: Run tests
        run: |
          newman run ${{ github.workspace }}/tests/collections/my_collection.json --env-var "service_url=${{needs.get-service-url.outputs.service_URL}}" --env-var "auth_token=${{needs.get-auth-token.outputs.API_TOKEN}}"
Run Code Online (Sandbox Code Playgroud)

因此,在运行期间,在我的输出中我看到:

Run …
Run Code Online (Sandbox Code Playgroud)

bash github jwt github-actions

2
推荐指数
1
解决办法
3251
查看次数

在C++中生成随机浮点数不起作用(Visual Studio 2013)

我知道这个问题有很多重复,但我的问题是不同的.我想要做的是在[-0.5,0.5]范围内生成一个简单的随机浮点数.我一直在使用的是这个链接中表达的公式:

C++随机浮点数生成

我需要两个不同的随机浮点数jitter_dxjitter_dy.根据上面链接的公式,我有:

float jitter_dx = -0.5f + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (0.5f - (-0.5f))));
float jitter_dy = -0.5f + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (0.5f - (-0.5f))));
Run Code Online (Sandbox Code Playgroud)

现在,我的问题很奇怪,因为当我尝试调试代码时,jitter_dx似乎总是相同(或略有不同),jitter_dy而是随机生成.在此,我给你带来的价值jitter_dx,并jitter_dy在10个不同的调试会话:

0.213156521,0.123004854

0.215659022,0.323389411

0.216849267,0259575188

0.217856407,-0.460295409

0.218955040,0.147907972

0.220358908,-0.259910882

0.221335471,0.0202490091

0.224143207,0.204702914

0.225333393,0.140888691

你可以看到jitter_dx总是(差不多)相同.两个值都是在另一个值之后计算的,中间没有任何代码.你可以帮我找到问题吗?提前致谢.

c++ random floating-point visual-studio-2013

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

在C++中访问继承类的特定方法

我来自Java背景,我有以下小方案,不符合我的理解:

template<typename T>
class GeomObject{
  public:
    T position;

    virtual Vec3<T> getPosition() = 0;
}


template<typename T>
class Plane : public GeomObject<T> {
  public:
    Vec3<T> position;
    T range;

    Vec3<T> getPosition() { return position; }
    T getRange() { return range;}
}
Run Code Online (Sandbox Code Playgroud)

在我的主要:

vector<GeomObject<float>*> g_objects;
g_objects.push_back(new Plane<float>());

g_objects[0]->getRange(); //ERROR
Run Code Online (Sandbox Code Playgroud)

我无法以某种方式访问​​getRange()方法.这在Java中是可能的,但这不是,甚至不是通过强制转换(Sphere)g_objects [0] - > getRange(); 我希望将矢量保持为GeomObjects的矢量.有什么我做错了吗?

c++ inheritance

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

powershell 中的新服务不接受 AutomaticDelayedStart 作为 StartupType

我正在尝试通过 powershell 创建一个带有 StartupType AutomaticDelayedStart的 Windows 服务。不幸的是,powershell 似乎不接受这种类型,它只需要 Boot、Syster、Automatic、Manual 或 Disabled。这是一个版本问题吗?我怎样才能解决这个问题?提前致谢!

在此处输入图片说明

powershell windows-services

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

从gluOrtho2D到3D

我按照指南绘制了2D的Lorenz系统.

我现在想要扩展我的项目并从2D切换到3D.据我所知,我必须用gluPerspective或glFrustum替换gluOrtho2D调用.不幸的是,无论我尝试什么都没用.这是我的初始化代码:

// set the background color
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

/// set the foreground (pen) color
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);*/

// set the foreground (pen) color
glColor4f(1.0f, 1.0f, 1.0f, 0.02f);

// enable blending
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// enable point smoothing
glEnable(GL_POINT_SMOOTH);
glPointSize(1.0f);

// set up the viewport
glViewport(0, 0, 400, 400);

// set up the projection matrix (the camera)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
    //gluOrtho2D(-2.0f, 2.0f, -2.0f, 2.0f);
gluPerspective(45.0f, 1.0f, 0.1f, 100.0f); //Sets the frustum to perspective mode


// set …
Run Code Online (Sandbox Code Playgroud)

opengl frustum

0
推荐指数
1
解决办法
521
查看次数

使用WHERE .. IN条件创建SQL查询使用整数列表

我不是SQL的专家,我想要实现的是以下内容.

我有一个名为的整数列表PersonIds.首先,我需要将这个整数列表转换为字符串列表.为什么?因为据我所知WHERE .. IN,SQL中的条件是我需要提供给查询的变量.

然后我需要修改字符串列表以防止SQL注入,因此@在每个Id列表之前插入.

最后,我创建了查询并提供了刚刚创建的列表.

我试图做的是:

var listIds = string.Join(",@", PersonIds, 0, PersonIds.Count()));
var query = $"DELETE FROM PersonTable WHERE PersonId IN (@{listIds})";
Run Code Online (Sandbox Code Playgroud)

有些事情我做错了.总结一下,我需要步骤:

  1. 准备一个列表(包括避免SQL注入的机制),我需要提供给查询
  2. 使用我创建的列表作为参数创建查询

提前致谢!

c# sql sql-injection

0
推荐指数
1
解决办法
82
查看次数

字符串上的 Any()

我不明白引擎盖下发生了什么。我有一个简单的字符串:

 var aux = "Hello";
Run Code Online (Sandbox Code Playgroud)

如果我运行:

aux.Any();
Run Code Online (Sandbox Code Playgroud)

它返回True。执行的Any()在 System.Core dll 中:

在此处输入图片说明

在引擎盖下是否有一个演员表,其中字符串被转换为一个可枚举的字符并且Any()验证列表是空的还是......?

提前致谢!

c# linq ienumerable

0
推荐指数
1
解决办法
82
查看次数

ld:捆绑安装时未找到架构 x86_64 的符号

不太明白发生了什么事。我只是想在我的 M1 mac 上安装一个新的 ruby​​ 版本,以便在需要与我所拥有的 ruby​​ 版本不同的存储库上运行简单的捆绑安装。最终重新安装了brew和rbenv并最终出现以下情况。

如果我运行brew install mysql,它会成功。还有brew install openssl

当我运行捆绑安装时,我陷入了通常出现的问题点:

获取 mysql2 0.5.3 安装带有本机扩展的 mysql2 0.5.3

我也跑成功了

gem install mysql2 -v '0.5.3' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
Run Code Online (Sandbox Code Playgroud)

错误是:

ld:未找到架构 x86_64 的符号

如果我运行gcc -v我得到

Apple clang version 14.0.0 (clang-1400.0.29.202).  
Target: arm64-apple-darwin22.3.0.   
Thread model: posix.  
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Run Code Online (Sandbox Code Playgroud)

而且在错误之前我有很多警告,其中:

linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/usr/local/opt/openssl/lib'
ld: warning: directory not found for option '-L/usr/local/opt/ruby/lib'
ld: warning: ignoring …
Run Code Online (Sandbox Code Playgroud)

ruby homebrew mysql-connector

0
推荐指数
1
解决办法
2287
查看次数