小编Phi*_*l K的帖子

在ASP.NET Core Identity UI中更改路由?

自ASP.NET Core 2.1发布以来,我正在使用新的Identity UI软件包.使用新生成的MVC项目,这里有一些可用的页面URL:

/Home/About
/Home/Contact
/Identity/Account/Login
/Identity/Account/Register
Run Code Online (Sandbox Code Playgroud)

如何配置路由以/Identity/从URL中删除部分?

c# asp.net-core asp.net-core-identity

18
推荐指数
3
解决办法
6406
查看次数

自动将数字转换为布尔值 - 从 Newtonsoft 迁移到 System.Text.Json

System.Text.Json我通过切换到ASP.NET Core 应用程序,意外地在 API 中引入了重大更改。我有一个客户端正在发送 JSON 文档,并使用数字1or0作为布尔字段而不是trueor false

// What they're sending.
{ "Active": 1 }

// What they should be sending.
{ "Active": true }
Run Code Online (Sandbox Code Playgroud)

Newtonsoft.Json通过将数字转换为布尔值(0 = false,其他 = true)来自动处理此问题,但System.Text.Json不会这样做;它会抛出异常。1这意味着我的 API 端点突然停止为发送's 和0's的愚蠢客户工作!

我似乎在迁移指南中找不到任何提及这一点。我想将行为恢复到 Newtonsoft 处理它的方式,但我不确定是否有一个标志可以在我看不到的地方启用它,或者我是否必须编写一个自定义转换器。

有人可以帮我恢复像 Newtonsoft 一样的行为吗?


下面是一些代码来演示该问题:

using System;

string data = "{ \"Active\": 1 }";

try
{
    OutputState s1 = System.Text.Json.JsonSerializer.Deserialize<OutputState>(data);
    Console.WriteLine($"OutputState 1: {s1.Active}");
}
catch (Exception …
Run Code Online (Sandbox Code Playgroud)

c# json asp.net-core system.text.json

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

为什么#clone()不在Cloneable接口中?

我正在阅读正确执行数组的深层副本,但是我对如何#clone()实现它感到困惑.它是java.lang.Object该类的成员,但如果您阅读了javadoc:

首先,如果此对象的类未实现Cloneable接口,则抛出CloneNotSupportedException.

那么为什么要首先定义clone那里的方法呢?当然,如果方法只能在存在接口时使用,则将该方法放在接口中.该Cloneable接口本身是空的; 它只是Java使用的标记接口,以确保使用该clone方法是合法的.

这样做也会消除使用泛型来确保类型安全的能力:

class Foo implements Cloneable { // Valid.
    @Override
    public Object clone() throws CloneNotSupportedException {
        // ...
    }
}

class TypeSafeFoo implements Cloneable<TypeSafeFoo> { // Not valid.
    @Override
    public TypeSafeFoo clone() throws CloneNotSupportedException {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么Java以这种方式完成它?我确信他们有合理的理由,但我似乎无法弄明白.

java

14
推荐指数
2
解决办法
3761
查看次数

Serilog - 如何自定义滚动文件名中的日期?

在 Serilog 中,您可以轻松启用滚动日志文件:

Log.Logger = new LoggerConfiguration()
    .WriteTo.File("log-.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

这将每天以以下格式创建一个新的日志文件:

  • log-20200214.txt
  • log-20200215.txt
  • log-20200216.txt

我的问题:是否可以自定义日期在文件名中的放置位置以及自定义日期的格式?

例如,我希望文件名如下所示:

  • 2020-02-14-log.txt
  • 2020-02-15-log.txt
  • 2020-02-16-log.txt

我希望替换"log-.txt""{Date:yyyy-MM-dd}-log.txt"会起作用,但事实并非如此。

c# serilog

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

我怎样才能完美地模拟KeyEvents?

我如何构建自己的KeyEvent对象,它完全(或非常接近)匹配我从KeyListener最终用户输入内容时收到的对象?


例如,我有一个英国的ISO键盘布局,并键入"我按下的字符Shift+2.如果我JFrame用a 记录这个KeyListener,我会收到以下事件:

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=50,keyText=2,keyChar='"',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_STANDARD,rawCode=50,primaryLevelUnicode=50,scancode=3,extendedKeyCode=0x32] on frame0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='"',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=50,keyText=2,keyChar='"',keyLocation=KEY_LOCATION_STANDARD,rawCode=50,primaryLevelUnicode=50,scancode=3,extendedKeyCode=0x32] on frame0
Run Code Online (Sandbox Code Playgroud)

我想创建一个方法,我将其"作为char参数,它将返回上面列出的KeyEvents数组.

我的问题是:

  • KEY_PRESSEDKEY_RELEASED事件中,keyChar='"'表示按下的字符("),但是keyCode=50指的是"非移位"的ASCII值(又名2).我需要知道如何从"字符中获取这个非移位值.

  • 对于不同的键盘布局,此非移位值也将不同.例如,美国ANSI布局需要Shift+'键入"密钥,这意味着keyCode将是39而不是50.

  • 在某些键盘布局中,Shift键需要键入键,而不是其他键.#例如,该字符需要Shift+3美国ANSI键盘,但不需要在英国ISO键盘上按压.我需要知道是否应该模拟移位按下/释放事件并提供移位修改器.

任何有关如何解决这些问题的见解将不胜感激.我还应该注意,Robot在我的情况下使用该类不能使用.

java keyevent

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

为什么接口根据类文件格式扩展Object?

为什么JVM规范状态接口必须有一个super_classjava/lang/Object,即使接口不延长java/lang/Object

我特别指的是JVM规范的§4.1,它说:

对于接口,super_class项的值必须始终是constant_pool表的有效索引.该索引处的constant_pool条目必须是表示Object类的CONSTANT_Class_info结构.

但是在JLS的第9.2节中,它表示接口不会扩展Object.而是声明一个隐式创建的抽象方法,它匹配Object类中的每个公共方法:

如果接口没有直接的超接口,则接口隐式声明一个公共抽象成员方法m,其中包含签名s,返回类型r和throws子句t,对应于具有签名s的每个公共实例方法m,返回类型r和throws子句t在Object中声明,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的方法.

java jvm jls

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

是否建议私有静态内部类封装?

如果您在Java中有一个私有静态嵌套类,是否仍建议使用getter和setter而不是直接字段访问?

一个例子.直接现场访问:

public class Application {
    private List<MyInnerClass> myInnerClassList;

    // ...

    public void foo() {
        MyInnerClass inner = new MyInnerClass();
        inner.bar = 50;
        myInnerClassList.add(inner);
    }

    private static class MyInnerClass {
        private int bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

vs封装:

public class Application {
    private List<MyInnerClass> myInnerClassList;

    // ...

    public void foo() {
        MyInnerClass inner = new MyInnerClass();
        inner.setBar(50);
        myInnerClassList.add(inner);
    }

    private static class MyInnerClass {
        private int bar;

        public int getBar() {
            return bar;
        }

        public void setBar(int bar) {
            this.bar = bar; …
Run Code Online (Sandbox Code Playgroud)

java

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

合并两个IGrouping集

假设我有三个用户,我想按国家对他们进行分组.我会这样做:

var users = new[]
{
    new User { Name = "Phil", Country = "UK" },
    new User { Name = "John", Country = "UK" },
    new User { Name = "Mike", Country = "USA" }
};

List<IGrouping<string, User>> groupedUsers
    = users.GroupBy(user => user.Country).ToList();
Run Code Online (Sandbox Code Playgroud)

现在假设我的程序稍后会再增加三个用户,所以我也将它们分组:

var moreUsers = new[]
{
    new User { Name = "Phoebe", Country = "AUS" },
    new User { Name = "Joan", Country = "UK" },
    new User { Name = "Mindy", Country = "USA" } …
Run Code Online (Sandbox Code Playgroud)

.net c# linq

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

Task.Delay超过int.MaxValue毫秒

Task.Delay可以告知延迟的最大持续时间是int.MaxValue毫秒.什么是最干净的方式来创造一个Task超过那个时间的延迟?

// Fine.
await Task.Delay(TimeSpan.FromMilliseconds(int.MaxValue));

// ArgumentOutOfRangeException
await Task.Delay(TimeSpan.FromMilliseconds(int.MaxValue + 1L));
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library async-await

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

如何在 EF Core 中使用 C# 9 记录?

我正在使用 ASP.NET Core 5 Web API,并且我正在尝试使用新的C# 记录作为我的模型类。但是,每当我使用以下with表达式更新修改后的模型时,都会收到有关跟踪问题的 EF Core 错误:

System.InvalidOperationException: The instance of entity type 'Product' cannot be
tracked because another instance with the key value '{ID: 2}' is already being
tracked. When attaching existing entities, ensure that only one entity instance
with a given key value is attached.
Run Code Online (Sandbox Code Playgroud)

我相信这是由于“变异”记录如何创建新的对象实例而 EF Core 的跟踪系统不喜欢这样,但我不确定修复它的最佳方法。有人有什么建议吗?或者我应该回到使用常规课程而不是记录?

这是重现问题的片段:

// Models/Product.cs
public record Product(int ID, string Name);


// Controllers/ProductController.cs
[HttpGet("test/{id}")]
public async Task<Product> ExampleControllerAction(int id, CancellationToken cancellationToken)
{
    string newName …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core asp.net-core c#-9.0

8
推荐指数
3
解决办法
1673
查看次数