小编Bar*_*osz的帖子

Resharper颜色标识符粗体变量

我已经打开Resharper颜色标识符来使用它来进行TT语法高亮显示,但我现在还不了解它在代码中突出显示的一些内容.

例如,变量为粗体时的含义是什么:

在此输入图像描述

我可以看到它暗示三元运算符,当我添加它时,它不再是粗体,但我想还有更多,因为否则它似乎是多余的.

在此输入图像描述

是否有关于颜色标识符识别的文档?我只在这里这里看到他们网站上的稀缺信息

c# resharper visual-studio

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

使用 JwtSecurityTokenHandler 反序列化后 ClaimsIdentity AuthenticationType 发生更改

首先,更广阔的背景。

我正在开发一个由单独的 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)

c# authentication claims-based-identity asp.net-web-api

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

EF 代码优先 - 配置一对零或一关系,无需共享 PK/FK

我正在尝试在两个实体之间建立一对零或一的关系,并且我希望依赖实体仍然包含它自己的 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 表的外键? …

c# sql-server entity-framework

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

从基类覆盖async void事件处理程序方法

我不知道如何处理以下场景.有一个接口定义了一个事件处理方法'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)

c# inheritance async-await

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

GRPC - HTTP/2 服务器在连接上发送了无效数据。从 .netcore 3.1 升级到 net5 或 net6 时出现 HTTP/2 错误代码“PROTOCOL_ERROR”

我有一个 .netcore3.1 测试项目,它调用 GRPC 服务。
\n该服务只能通过 HTTP 获得。我现在无法更改服务。

\n

当我将项目更新到 .net5-windows 或 .net6-windows(实际上只是 csproj 更改)时,调用失败并出现以下错误:

\n
\n

Grpc.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 …

c# .net-core grpc .net-5 .net-6.0

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

azure pipelines - 如何根据条件任务结果中断/取消发布

我有一个由 CI 触发的发布管道,如果该版本尚不存在,我想推送新版本的 nuget 包。

为此,我有一个简单的命令行任务,它检查 nuget.org 上是否存在该 nuget 并将结果存储在环境变量中。

然后,我可以设置后续步骤的条件,只有当该值变量为 true 时才会执行该步骤。

在此输入图像描述

这一切都很好,但是我想知道如何简单地停止发布过程并跳过所有后续步骤,而不需要一一设置它们的条件。

另外,如何将任务的构建状态设置为“已取消”?

azure-devops azure-pipelines-build-task azure-pipelines azure-pipelines-release-pipeline

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

通知正在进行的长时间运行的异步任务 - 正确的方式

我有一个控制台程序,它向外部 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)

c# asynchronous progress async-await

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

如果Any()为true,为什么LINQ会在Count()上抛出空引用错误?

我有一个问题 - .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# linq

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