预期行为 能够从容器内进行 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 容器中运行所需的 …
我认为这个标题已经很好地解释了这个问题.我有一个源类型:
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) 我刚刚在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) 我正在为这个简单地调用外部 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) 当我可以在我的控制器中注入抽象类的 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)
之后,我将拥有两个不同的类Api1Service和Api2Service,它们扩展了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
我试图在作业之间传递 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) 我知道这个问题有很多重复,但我的问题是不同的.我想要做的是在[-0.5,0.5]范围内生成一个简单的随机浮点数.我一直在使用的是这个链接中表达的公式:
我需要两个不同的随机浮点数jitter_dx
和jitter_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
总是(差不多)相同.两个值都是在另一个值之后计算的,中间没有任何代码.你可以帮我找到问题吗?提前致谢.
我来自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的矢量.有什么我做错了吗?
我正在尝试通过 powershell 创建一个带有 StartupType AutomaticDelayedStart的 Windows 服务。不幸的是,powershell 似乎不接受这种类型,它只需要 Boot、Syster、Automatic、Manual 或 Disabled。这是一个版本问题吗?我怎样才能解决这个问题?提前致谢!
我按照指南绘制了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) 我不是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)
有些事情我做错了.总结一下,我需要步骤:
提前致谢!
我不明白引擎盖下发生了什么。我有一个简单的字符串:
var aux = "Hello";
Run Code Online (Sandbox Code Playgroud)
如果我运行:
aux.Any();
Run Code Online (Sandbox Code Playgroud)
它返回True。执行的Any()在 System.Core dll 中:
在引擎盖下是否有一个演员表,其中字符串被转换为一个可枚举的字符并且Any()验证列表是空的还是......?
提前致谢!
不太明白发生了什么事。我只是想在我的 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) c# ×6
asp.net-core ×2
c++ ×2
api ×1
automapper ×1
bash ×1
certificate ×1
converter ×1
docker ×1
frustum ×1
github ×1
homebrew ×1
https ×1
ienumerable ×1
inheritance ×1
jwt ×1
linq ×1
moq ×1
opengl ×1
powershell ×1
random ×1
refit ×1
ruby ×1
sql ×1
ssl ×1
unit-testing ×1
xunit ×1