在编写供其他 C# 应用程序(某些 Web 应用程序、某些 AWS lambdas)使用的库时,将消息写入控制台有哪些缺点?如果开发人员有权访问日志,这些消息将不常见且操作不必要,但将有助于调试不常见的场景。
不要使用 Console 类在无人参与的应用程序(如服务器应用程序)中显示输出。调用 Console.Write 和 Console.WriteLine 等方法在 GUI 应用程序中无效。
但没有解释为什么。
在 Azure DevOps 中,我有我的公司nuget存储库。我创建了一些新的 nuget 包,并将它们包含在我的项目中。在本地,项目运行良好。
当我dotnet build在 DevOps 上运行时出现错误,因为对 nuget 存储库进行了未经授权的访问。
[错误]C:\Program Files\dotnet\sdk\3.1.202\NuGet.targets(124,5):错误:无法加载源https://vs.pkgs.visualstudio.com/Vs/的服务索引 _packaging/vs.com/nuget/v3/index.json。
响应状态代码不表示成功:401(未授权)。
C:\Program Files\dotnet\sdk\3.1.202\NuGet.targets(124,5): 错误:无法加载源https://vs.pkgs.visualstudio.com/Vs/_packaging/vs的服务索引 .com/nuget/v3/index.json。[d:\a\1\s\Payments\Payments.csproj]
C:\Program Files\dotnet\sdk\3.1.202\NuGet.targets(124,5): 错误:响应状态代码不表示成功:401(未经授权)。[d:\a\1\s\PiP.Payments.Stripe\PiP.Payments.csproj]
构建失败。
C:\Program Files\dotnet\sdk\3.1.202\NuGet.targets(124,5): 错误:无法加载源https://vs.pkgs.visualstudio.com/Vs/_packaging/vs的服务索引 .com/nuget/v3/index.json。[d:\a\1\s\PiP.Payments.Stripe\PiP.Payments.csproj]
C:\Program Files\dotnet\sdk\3.1.202\NuGet.targets(124,5): 错误:响应状态代码不表示成功:401(未经授权)。
我有一个 Azure Linux WebApp 使用 docker-compose 来运行三个容器:Asp.Net Core 3.1 WebApp、Nginx 作为反向代理和一个 Asp.Net Core WebJob (SKD 3) 来生成 PDF 报告。WebApp 位于https://pdf.ricardogaefke.com。
问题是:生成的 PDF 有一个带有在线检查链接的 QrCode,我在运行 WebJob 时遇到问题(“libgdiplus未找到),我尝试安装这个libgdiplus 包。这个问题与System.Drawing命名空间有关。
问题是该软件包处于边缘/测试版本中,无法使用apk add命令进行安装。我怎样才能安装这个包?
我是 AzureAD 身份验证的新手。我在 startup.cs 中使用以下设置设置了我的 Web API
services.AddAuthentication(sharedopt => sharedopt.DefaultScheme = JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer("AzureAd", options =>
{
options.Audience = Configuration.GetValue<string>("AzureAd:Audience");
options.Authority = Configuration.GetValue<string>("AzureAd:Instance")
+ Configuration.GetValue<string>("AzureAd:TenantId");
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
ValidIssuer = Configuration.GetValue<string>("AzureAd:Issuer"),
ValidAudience = Configuration.GetValue<string>("AzureAd:Audience")
};
});
Run Code Online (Sandbox Code Playgroud)
我希望我的客户端应用程序 (Angular) 将在其请求中附加 Authorization 标头,因此它可以访问 API
但是当我执行 Web API 并尝试使用授权打开任何 API 时,它会触发此错误
InvalidOperationException: 未指定 authenticationScheme,也未找到 DefaultChallengeScheme。可以使用 AddAuthentication(string defaultScheme) 或 AddAuthentication(Action configureOptions) 设置默认方案。
我已经指定了 JWTBearerDefaults.AuthenticationScheme。仍然为什么它不接受?
我删除了 Visual Studio,但我喜欢 c#。我从dotnet 官方网站下载了 dotnet并安装了它。然后我写在命令行dotnet new console和所有工作,dotnet run工作。然后我创建其他文件夹并在那里写入dotnet new classlib(是 .dll)并且它工作。但我不知道如何将我的 .dll 文件添加到我的项目中。怎么做?
我想使同步功能异步
public JobSync()
{
// a lot of logic
}
Run Code Online (Sandbox Code Playgroud)
两个都
public async JobAsync()
{
JobSync()
await Task.CompleteTask;
}
Run Code Online (Sandbox Code Playgroud)
和
Task.Run(()=>JobSync())
Run Code Online (Sandbox Code Playgroud)
作品,
但是两种方式有什么区别吗?
我有一个 .asp 网络核心项目,它async在 Configure 方法中运行一些永无止境的任务。在注意到这些方法中的异常没有记录到控制台之后。我只是做了一个小测试。像这样的东西:
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env, ApplicationDbContext context)
{
try
{
Task.Run(async () => { throw new Exception("My exception"); });
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不在async方法中记录这些异常?如果我只是在配置中抛出异常,它会毫无问题地抛出并记录到控制台。
以下代码有效。
employees.AddRange(from e in DbContext.Employees
select new EmployeeSummaryModel
{
Name = e.Name,
Email = e.Email
});
Run Code Online (Sandbox Code Playgroud)
但是我将如何重写此查询以使用await?请注意,我不想使用,ToListAsync()因为这会不必要地创建第二个列表?
c# entity-framework async-await entity-framework-core .net-core
我在 .NET Core 项目中使用 OpenAPI (Swagger),当使用多个具有类似获取请求的方法时,我遇到“Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:请求匹配多个端点”。运行时出错。我查看了 web 和 SO 上的几个页面,并尝试应用诸如请求匹配多个端点之类的解决方法,但为什么呢?,但这并不能解决问题。以下是我使用的 API 方法和路由定义。
[Route("get", Name="get")]
public IEnumerable<DemoDto> Get()
{
//
}
[Route("get/{id}", Name="getById")]
public DemoDto GetById(int id)
{
//
}
[Route("get/{query}", Name="getWithPagination")]
public IEnumerable<DemoDto> GetWithPagination(DemoQuery query)
{
//
}
Run Code Online (Sandbox Code Playgroud)
我使用Name财产来解决问题但没有解决。有什么想法可以改变路线以区分Get()和GetWithPagination()吗?
启动了一个新的 Blazor WebAssembly 项目(Windows 10,Visual Studio 2019),尝试从服务器端通过 HttpClient 获取一个简单的列表。
错误:
00755c3a:0xa3a0 Uncaught (in promise) RuntimeError: memory access out of bounds
at malloc (<anonymous>:wasm-function[359]:0xa3a0)
at monoeg_malloc (<anonymous>:wasm-function[161]:0x3c71)
at stack_frag_new (<anonymous>:wasm-function[2019]:0x59758)
at add_frag (<anonymous>:wasm-function[1430]:0x3ccf2)
at interp_exec_method (<anonymous>:wasm-function[1120]:0x2f609)
at interp_runtime_invoke (<anonymous>:wasm-function[5655]:0xf7391)
at mono_jit_runtime_invoke (<anonymous>:wasm-function[5109]:0xddb3d)
at do_runtime_invoke (<anonymous>:wasm-function[1410]:0x3ba85)
at mono_runtime_try_invoke (<anonymous>:wasm-function[418]:0xcfdb)
at mono_runtime_invoke (<anonymous>:wasm-function[1610]:0x44b39)
Run Code Online (Sandbox Code Playgroud)
服务器端(正确返回):
[HttpGet]
public async Task<IEnumerable<UserDetailsRM>> Get()
{
var users = await UserService.GetUsers();
return users;
}
Run Code Online (Sandbox Code Playgroud)
客户端:尽管得到了结果,但不渲染任何东西。
<div class="userListWrapper">
@if (Users != null)
{
<table class="table table-borderless" style="font-size:12px; font-family:arial; height:
500px; …Run Code Online (Sandbox Code Playgroud) .net-core ×10
c# ×9
.net ×3
async-await ×2
alpine-linux ×1
api ×1
asp.net-core ×1
azure-devops ×1
blazor ×1
docker ×1
dotnet-cli ×1
exception ×1
jwt ×1
nuget ×1
rest ×1
webapi ×1