我已经打开Resharper颜色标识符来使用它来进行TT语法高亮显示,但我现在还不了解它在代码中突出显示的一些内容.
例如,变量为粗体时的含义是什么:
我可以看到它暗示三元运算符,当我添加它时,它不再是粗体,但我想还有更多,因为否则它似乎是多余的.
首先,更广阔的背景。
我正在开发一个由单独的 Web API 支持的 Web 应用程序。Web 应用程序中的身份验证应基于 ActiveDirectory,并且应由 Web API 处理。
因此, Web 应用程序上LogIn的操作AccountController仅向AuthenticationController- 发送一个发布请求,并且我使用 UserPrincipal 和 PrimaryContext 进行 AD 身份验证。身份验证工作正常,我创建了一些声明。
当我需要将结果发回网络应用程序时,问题就开始了,以便我可以像下面这样进行“登录”
if (result.Claims == null)
{
this.Logger.Error($"Something went wrong when discovering identity of user [{model.UserName}]");
throw new InvalidOperationException(Strings_Error.ErrorWhileDiscoveringUserIdentity);
}
IAuthenticationManager authenticationManager = this.HttpContext.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, result.Claims);
Run Code Online (Sandbox Code Playgroud)
我正在使用 JwtSecurityTokenHandler 序列化声明,以便我可以将它们附加到来自 Web Api 控制器的响应消息。序列化发生如下:
public static string GenerateToken(this ClaimsIdentity identity)
{
SymmetricSecurityKey securityKey = new SymmetricSecurityKey(Encoding.Default.GetBytes(ClaimsIndentitySerializer.SecurityKey));
SigningCredentials signingCredentials …Run Code Online (Sandbox Code Playgroud) 我正在尝试在两个实体之间建立一对零或一的关系,并且我希望依赖实体仍然包含它自己的 Indentity 列,而不是它是共享密钥。
我想尽可能地遵循约定,而不是明确声明任何不需要明确声明的东西(因此,没有不必要的数据注释或流畅的 api 子句)
实体:
public class File
{
public int FileId {get;set;}
//some omitted file properties
public virtual Task Task {get;set;}
}
public class Task
{
public int TaskId {get;set;}
//some omitted task properties
public int FileId {get;set;}
public virtual File File {get;set;}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<File>().HasOptional(f => f.Task).WithRequired(t => t.File);
base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)
这会创建一个奇怪的关系,其中 TaskId 是 Tasks 表的 PK 和 FK 列。我认为这意味着它应该与文件 ID 具有相同的值?(这是一个问题:))
那么,如何让 TaskId 保持其自己的顺序值并使 FileId 成为 Files 表的外键? …
我不知道如何处理以下场景.有一个接口定义了一个事件处理方法'OnSomethinHappening()'.
有一个基类将其实现为虚方法,并在其中使用一些异步代码.
有一个派生类想要覆盖虚方法,但也调用base.OnSomethingHappening().
public interface ISomething
{
void OnSomethingHappening();
}
public class BaseClass
{
public virtual async void OnSomethingHappening()
{
await Task.Delay(1999);
}
}
public class DerivedClass : BaseClass
{
public override void OnSomethingHappening()
{
base.OnSomethingHappening();
//some more code
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我无法将方法调用标记为等待,因为它返回void.为事件处理程序提供异步void方法很好,因此无法将其更改为Task(它也不是我的代码).
那么,base.OnSomethingHappening()在进入自己的代码之前,我应该如何确保我的派生类正确执行?
这个解决方案在派生类中是否有意义?:
public override async void OnSomethingHappening()
{
await Task.Run(()=> base.OnSomethingHappening());
//some more code
}
Run Code Online (Sandbox Code Playgroud) 我有一个 .netcore3.1 测试项目,它调用 GRPC 服务。
\n该服务只能通过 HTTP 获得。我现在无法更改服务。
当我将项目更新到 .net5-windows 或 .net6-windows(实际上只是 csproj 更改)时,调用失败并出现以下错误:
\n\nGrpc.Core.RpcException : Status(StatusCode="Unavailable", Detail="启动 gRPC 调用时出错。HttpRequestException: 发送请求时发生错误。IOException: 请求已中止。Http2ConnectionException: HTTP/2 服务器发送了无效数据连接。HTTP/2 错误代码 \'PROTOCOL_ERROR\' (0x1)。", DebugException="System.Net.Http.HttpRequestException: 发送请求时发生错误。\n---> System.IO.IOException:请求已中止。\n---> System.Net.Http.Http2ConnectionException: HTTP/2 服务器在连接上发送了无效数据。HTTP/2 错误代码 \'PROTOCOL_ERROR\' (0x1)。\nat System.Net .Http.Http2Connection.ThrowProtocolError(Http2ProtocolErrorCode errorCode)\nat System.Net.Http.Http2Connection.ReadFrameAsync(Boolean initialFrame)\nat System.Net.Http.Http2Connection.ProcessIncomingFramesAsync()\n--- 内部异常堆栈跟踪结束 - --\nat System.Net.Http.Http2Connection.ThrowRequestAborted(Exception innerException)\nat System.Net.Http.Http2Connection.Http2Stream.CheckResponseBodyState()\nat System.Net.Http.Http2Connection.Http2Stream.TryEnsureHeaders()\nat System .Net.Http.Http2Connection.Http2Stream.ReadResponseHeadersAsync(CancellationToken CancellationToken)\nat System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken CancellationToken)\n--- 内部异常堆栈跟踪结束 ---\ nat System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage 请求,布尔异步,CancellationToken CancellationToken)\nat System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage 请求,布尔异步,布尔 doRequestAuth,CancellationToken CancellationToken)\nat System.Net。 Http.RedirectHandler.SendAsync(HttpRequestMessage 请求、布尔异步、CancellationToken CancellationToken)\nat Grpc.Net.Client.Web.GrpcWebHandler.SendAsyncCore(HttpRequestMessage 请求、CancellationToken CancellationToken)\nat System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage请求,HttpCompletionOption finishOption,CancellationTokenSource …
我有一个由 CI 触发的发布管道,如果该版本尚不存在,我想推送新版本的 nuget 包。
为此,我有一个简单的命令行任务,它检查 nuget.org 上是否存在该 nuget 并将结果存储在环境变量中。
然后,我可以设置后续步骤的条件,只有当该值变量为 true 时才会执行该步骤。
这一切都很好,但是我想知道如何简单地停止发布过程并跳过所有后续步骤,而不需要一一设置它们的条件。
另外,如何将任务的构建状态设置为“已取消”?
azure-devops azure-pipelines-build-task azure-pipelines azure-pipelines-release-pipeline
我有一个控制台程序,它向外部 Web API 发送异步 HTTP 请求。( HttpClient.GetAsync());)
这些任务可能需要几分钟才能完成——在此期间,我希望能够向用户显示应用程序仍在运行——例如Console.WriteLine("I ain't dead - yet")每 10 秒发送一次。
我不知道如何正确地做到这一点,而不会有隐藏异常、引入死锁等的风险。
我知道 IProgress<T>,但是我不知道我是否可以在这种情况下引入它。我正在等待一个不报告进度的异步调用。(它本质上是一个调用 httpClient GetAsync() 方法的 SDK
另外:我无法将 GUI 设置为“InProgress”,因为没有 GUI,它是一个控制台应用程序 - 如果我不时不时地发送更新消息,它在用户看来似乎停止工作。
目前的想法:
try
{
var task = httpClient.GetAsync(uri); //actually this is an SDK method call (which I cannot control and which does not report progress itself)
while (!task.IsCompleted)
{
await Task.Delay(1000 * 10);
this.Logger.Log(Verbosity.Verbose, "Waiting for reply...");
}
onSuccessCallback(task.Result);
}
catch (Exception ex)
{
if (onErrorCallback == null)
{
throw this.Logger.Error(this.GetProperException(ex, …Run Code Online (Sandbox Code Playgroud) 我有一个问题 - .Count()如果.Any()返回true,为什么我在此IEnumerable 的方法中获得空引用异常?
Logger.Normal("{0}", targetWorkflow.GetStages().Any() ? "any is true!" : "any is false");
Logger.Normal("{0}", targetWorkflow.GetStages().Count());
Run Code Online (Sandbox Code Playgroud)
错误:
StackTrace = [ at Sth.Workflow.<GetStages>d__13.MoveNext()XX at System.Linq.Enumerable.Count[TSource]
老实说,Count()如果.Any()是真的话,我希望该方法应至少返回1 ,而如果Any()为false,则返回0?
请告诉我错在哪里.
另外 - 请注意我不是要解决实际问题,我试图理解为什么Any() == true不能确保收集是健康的和"可数的".
c# ×7
async-await ×2
.net-5 ×1
.net-6.0 ×1
.net-core ×1
asynchronous ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
grpc ×1
inheritance ×1
linq ×1
progress ×1
resharper ×1
sql-server ×1