小编Mog*_*og0的帖子

使用 FluentAssertions NotBeNull 不会被可为 null 的分析器考虑

当我使用 Fluent 断言来测试属性是否不为空时,分析器仍然会抱怨后续行取消引用该行可能为空。在使用 FluentAssertions 进行测试后,有什么方法可以让编译器将属性识别为不为空吗?例如

Foo? foo = Bar();

foo.Should().NotBeNull();
foo.Value.Should().Be(5); // Warning about dereference of a possibly null reference on this line
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用!在第二行的 foo 上,但是有什么方法可以让分析器自己解决这个问题吗?

我确实找到了这个,但我不知道如何在这种情况下使用它。

c# fluent-assertions nullable-reference-types .net-5

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

Serilog 可以输出级别“Trace”而不是“Verbose”吗?

我在 .Net 5 中将 serilog 与 ASP.Net 一起使用,并且使用 Microsoft.Extensions.Logging.ILogger。问题是当我将以下内容放入代码中时:

logger.Log(LogLevel.Trace, "Trace message")
Run Code Online (Sandbox Code Playgroud)

Serilog 输出“详细”日志级别。

我知道这与 Serilog 等效,但是有没有一种简单的方法可以让 Serilog 将此级别输出为“Trace”?输出与我在代码中输入的不同有点令人困惑?

目前,我在开发时正在向 Console 和 PostgreSQL 写入数据,但当我们开始部署到 Azure Kubernetes 服务(例如 Application Insights)时,可能会添加不同的接收器。

serilog asp.net-core .net-5

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

如何使用 Dapr 进行单元测试?

我有一个类正在尝试进行单元测试,但它使用 DaprClient 对象(来自 SDK),该对象在我的单元测试环境中不起作用。我想创建一个模拟并使用它,但 DaprClient 实现的唯一接口是 IDisposable。

有没有办法模拟 DaprClient 进行单元测试?

我能想到的唯一解决方案是将 DaprClient 包装在一个带有接口的类中,并在任何地方使用这个包装器。这感觉真的很混乱,每次我想在 DaprClient 上使用新方法时都需要更新包装器。

我对其他可能绕过问题的解决方案持开放态度,但我更喜欢用模拟类型方法进行简单替换。

我在 Windows 上的 Visual Studio 2019 中使用 .Net 5、xUnit 和 Moq(尽管一些团队成员使用 Mac,因此需要在两个平台上工作)。

在此特定实例中,我使用DaprClient.GetBulkSecretAsync方法,但如果可能的话,我想要一个可以在其他地方使用的解决方案。

unit-testing moq xunit .net-5 dapr

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

VirtualPathUtility 的 ASP.Net 核心替换

VirtualPathUtility.ToAbsolute在 ASP.Net Core 中有替代品吗?它似乎不可用。

我想将相对路径(例如“~/bob”)转换为绝对路径,例如“/app/bob”。

我正在尝试从类库中执行此操作,因此无法访问控制器和视图的常用属性。

我正在将一个应用程序从 ASP.Net 移植到 ASP.Net Core 并且这个库正在从很多地方被调用并且从控制器传递参数不是我想要做的事情 - 这将是几个小时的工作我必须经过的地方的数量。

我正在使用 ASP.Net Core 2.1,在 .Net Framework 4.7.1 上运行(尽管我计划在未来的版本中移植到 .Net Core,一旦删除了一些依赖项,所以我想要一个可以与 Famework 和.Net 核心)

c# asp.net-core

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

当提供max-age和Last-Modified标头时,Webkit不会缓存

我有一个基于Web的应用程序与自定义Web服务器的编写,我遇到webkit浏览器的问题,而不是缓存图像,样式表和JavaScript.

我已将其跟踪到Cache-Control:max-age和Last-Modified之间的某种关系.如果同时指定了两者,则webkit似乎忽略max-age标头并检查文件是否在每次使用资源时都被修改.该网站在第一页上有一个iframe,它会导致样式表等在一秒内被请求两次!

如果删除Last-Modified,则在第二天之前不会重新请求文件; 但是,第二天的请求将不再是if-modified-自请求以来,要求服务器重新发送所有内容,而不仅仅是304头.

在IE9,Firefox 10.0和Opera 11.61上,浏览器正确缓存并且不重新请求图像,只有HTML,它具有Cache-Control:no-cache头属性.

在Chrome 16.0.912.77 m和Safari 5.1.2(7534.52.7)上,每次都会对每个页面上的每个图像发出一个条件请求.服务器以304标头响应,同样包含max-age属性,但它们都继续请求.

我通过响应发送的示例HTTP标头是:

HTTP/1.1 200 OK
Date: Mon, 06 Feb 2012 15:12:12 GMT
Cache-Control: max-age=86400
Content-length: 708
Content-type: image/gif
Last-Modified: Fri, 6 Jan 2012 14:39:07 GMT
Server: Webspring
Run Code Online (Sandbox Code Playgroud)

有没有人有任何关于如何让这些浏览器尊重我的缓存标头的建议?

所有浏览器都在Win7 Pro x64上运行,上面的HTTP标头是Fiddler的原始输出,因此这正是浏览器接收的内容.

注意:在我发现这是头字段之间的交互之前,我曾问过上一个问题.我删除了之前的问题,因为它不再准确.

谢谢

webkit http-caching

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

如何在ConfigureAuth之后更改Asp.Net Identity中的Cookie ExpireTimeSpan

我们有一个使用Asp.Net标识的产品,我们希望cookie的到期时间是可配置的.ExpireTimeSpan当前设置在Visual Studio为新项目创建的Startup.ConfigureAuth类中.这是从启动时的配置文件中获取时间,但我们希望能够从webAPI更改此值.目前,webAPI请求可以修改配置文件,但我们需要回收应用程序池才能使其生效.

一旦服务器启动并运行,有没有办法更改此值?

我在这个主题上找到的只是这个问题ASP.NET身份变更ExpireTimeSpan在ConfigureAuth之后,但它要求一种方法来改变它为单个会话,而我想为整个服务器全局更改它.

更新:我通过浏览Katana源找到了选项似乎存储在类的公共属性中Microsoft.Owin.Security.Cookies.CookieAuthenticationMiddleware但我不知道有什么方法可以从我的应用程序中获取对所使用对象的引用.

c# asp.net asp.net-identity-2

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

实体框架核心两个外键 - 同表

我在对同一个表有两个外键引用时遇到问题。外键 id 字段已填充,但导航字段和列表(团队字段)未填充 - 它们都为空。

我的课程是:

public class Team
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Fixture> HomeFixtures { get; set; }
    public virtual ICollection<Fixture> AwayFixtures { get; set; }
}

public class Fixture
{
    public int Id { get; set; }

    public int HomeTeamId { get; set; }
    public int AwayTeamId { get; set; }

    public Team HomeTeam { get; set; }
    public Team AwayTeam { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-core

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

Visual Studio 2019预览版远程调试器

在Visual Studio 2017中,我以管理员身份在本地计算机上运行远程调试器服务器(MSVSMON),以便可以将调试器附加到IIS,而无需以管理员身份运行Visual Studio。

运行Visual Studio 2019预览版时,附加调试器对话框似乎无法检测到MSVSMON进程,因此无法连接。

是否有新版本的MSVCMON?我已经尝试过使用Bing / Google,但没有运气。难道只是2019年的一个漏洞,它无法检测到但应该检测到吗?

我如何解决此问题的任何建议将不胜感激。这是我工作流程的关键部分。

visual-studio-2019

5
推荐指数
3
解决办法
6099
查看次数

如何选择在 Visual Studio 2022 中调试时启动的 Edge 配置文件

有没有办法告诉 Visual Studio 2022 在调试 docker 应用程序时启动哪个 Edge 配置文件?

他们似乎删除了“浏览方式”选项,该选项允许您使用参数定义新的浏览器,并且只允许您选择不带参数的 Edge、Chrome、Firefox 等。

我的默认配置文件是“工作”,它使用新的 Edge 进行业务,但 Visual Studio 不断启动我的个人配置文件。这是有问题的,因为调试时需要使用的所有保存的密码都在“工作”配置文件中。

microsoft-edge visual-studio-2022

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

Enum.TryParse 在泛型中不被接受,仅限于 Enum

我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,该函数接受 astring并将其转换为 an enum(然后做了一些我为了简洁而跳过的其他东西)。问题是,它抱怨Enum.TryParse需要一个不可为空的类型,它抱怨 T 是可以为空的;看似可以System.Enum为空,但实际枚举不可为空。是我在这里做错了什么还是有办法解决这个问题。

private T GetEnumFilter<T>(string strValue) where T : Enum
{
     return Enum.TryParse(strValue, out T value) ? value : throw new Exception("Invalid value");
}
Run Code Online (Sandbox Code Playgroud)

我看过这个/sf/answers/566075191/答案和dotnet 样本中的样本,但看不出我做错了什么。

c# generics enums

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

ASP.NET标识:修改声明后不更新cookie

我在.Net 4.6.2/MVC5中更新ASP.Net Identity 2.2.1的声明时遇到问题.更新声明后,它通常会向浏览器发送更新的cookie,一切正常,但有时没有设置cookie标头发送到浏览器.

我无法确定何时发生任何模式,而不是在发生故障时,服务器正在发送

Persistent-Auth: true
Run Code Online (Sandbox Code Playgroud)

会话中每个响应的http标头值.我不知道是什么原因导致此标头值被设置并且它有时会出现在会话中间,一旦它开始发送它,它将被发送到会话的其余部分并且尝试更新声明将永远不会再次为该会话工作.

据我所知,我在每次调用ASP.Net标识时都将isPersistent参数硬编码为false,我看不到任何可能与此标头相关的内容.

我用来更新声明的代码是

public static void UpdateClaims(List<Claim> claims)
{
    var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
    var newIdentity = new ClaimsIdentity(HttpContext.Current.User.Identity);

    foreach (Claim claim in claims)
    {
        Claim oldClaim = newIdentity.FindFirst(claim.Type);
        if (oldClaim != null && oldClaim.Type != "")
        {
            newIdentity.RemoveClaim(oldClaim);
        }
        newIdentity.AddClaim(claim);
    }
    authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant
          (new ClaimsPrincipal(newIdentity), new AuthenticationProperties { IsPersistent = false });
}
Run Code Online (Sandbox Code Playgroud)

这是从MVC动作方法调用的.

有没有人有什么建议可能会出问题,甚至只是一个起点在哪里看?我不知道是什么导致持久性auth标头,但它看起来与问题有关; 无论是问题的原因还是症状,我都不知道.

我正在使用ASP.Net Identity 2.2.1和.Net 4.6.2.我在Windows Server 2012R2上运行,IE11,Chrome和Firefox似乎也出现了这个问题.我正在使用Fiddler 4.6.3来查看http标头/响应.

更新:我注意到只有在启用Windows身份验证时才会出现问题.我的服务器有一个允许用户名/密码,Windows身份验证或两者的设置(用户可以选择使用用户名/密码以其他用户身份登录).当使用windows auth时,我最初使用Windows对用户进行身份验证,然后设置一个cookie,然后我将其用于会话中的所有未来请求.如果禁用了Windows身份验证,则更新此类声明始终有效.如果启用了Windows身份验证,则更新声明通常有效.

c# asp.net asp.net-mvc asp.net-identity

0
推荐指数
2
解决办法
5094
查看次数

包含异步和同步的并行循环

我有一个需要并行运行的循环,因为每次迭代都很慢并且需要大量处理器,但我还需要调用异步方法作为循环中每次迭代的一部分。

我见过关于如何在循环中处理异步方法的问题,但没有看到关于异步和同步的组合的问题,这就是我所得到的。

我的(简化的)代码如下 - 我知道由于异步操作被传递给 foreach,这将无法正常工作。

protected IDictionary<int, ReportData> GetReportData()
{
    var results = new ConcurrentDictionary<int, ReportData>();
      
    Parallel.ForEach(requestData, async data =>
    {
        // process data synchronously
        var processedData = ProcessData(data);

        // get some data async
        var reportRequest = await BuildRequestAsync(processedData);

        // synchronous building
        var report = reportRequest.BuildReport();

        results.TryAdd(data.ReportId, report);
     });

     // This needs to be populated before returning
     return results;
}
Run Code Online (Sandbox Code Playgroud)

当操作必须异步才能等待单个异步调用时,有什么方法可以并行执行操作。

将同步函数转换为异步函数并不是一个实用的选择。

我不想将操作拆分并使用 Parallel.ForEach ,然后使用 WhenAll 和另一个 Parallel.ForEach 进行异步调用,因为每个阶段的速度在不同迭代之间可能差异很大,因此拆分操作效率较低,因为速度越快那些人会等待较慢的人然后再继续。

我确实想知道是否可以使用 PLINQ ForAll 来代替 Parallel.ForEach,但从未使用过 PLINQ,并且不确定它是否会在返回之前等待所有迭代完成,即任务是否仍在运行结束的过程。

c# parallel-processing plinq async-await parallel.foreach

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