我知道已经提出了这样的问题,但是解决方案并没有帮助我。
[Fact]
public async Task UpdateAsync()
{
    string newTitle = "newTitle1";
    int newBrandId = 3;
    var item = await storeContext.Items.AsNoTracking().FirstOrDefaultAsync();
    item.BrandId = newBrandId;
    item.Title = newTitle;
    storeContext.Entry(item).State = EntityState.Detached;
    await service.UpdateAsync(item); // exception inside
    var updatedItem = await storeContext.Items.AsNoTracking().FirstOrDefaultAsync();
    Assert.Equal(newTitle, updatedItem.Title);
    Assert.Equal(newBrandId, updatedItem.BrandId);
}
public async Task UpdateAsync(T entity)
{
    _dbContext.Entry(entity).State = EntityState.Modified; // exception when trying to change the state
    await _dbContext.SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)
消息:System.InvalidOperationException:无法跟踪实体类型'Item'的实例,因为已经跟踪了另一个具有相同'{'Id'}键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'来查看冲突的键值。
有趣的是,即使没有任何项目从数据库撤回,异常也是一样的,就像这样
//var item = await storeContext.Items.AsNoTracking().FirstOrDefaultAsync();
  var item = new Item()
  {
      Id = 1, …Run Code Online (Sandbox Code Playgroud) ASP NET CORE 2 我有以下页面模型代码
public class CreateModel : PageModel
{
    private readonly IItemService _itemService;
    public ItemCreateViewModel ItemModel { get; set; }
    public CreateModel(IItemService itemService)
    {
        _itemService = itemService;
    }
    // all related data downloaded from db, so all rendered correctly
    public async Task OnGet(ItemCreateViewModel itemModel)
    {
        ItemModel = await _itemService.GetCreateViewModel();
    }
    public async Task<IActionResult> OnPost(ItemCreateViewModel itemModel)
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }
        var item = _itemService.CreateItem(itemModel);
        var image = await ImagesController.ProcessFormImage(itemModel.ImageUpload.UploadPhoto, item.Id, ModelState);
        if (!ModelState.IsValid)
        {
            //trouble is …Run Code Online (Sandbox Code Playgroud) 我做了一些研究,并且没有太多关于注册手动 DI 标准类的信息。尝试在 asp net core 2.1 应用程序中实现单元测试时遇到很多问题,这是最后一个。尝试 UserManager 创建的 SignInAsync 用户时出现空引用异常 - 似乎无法注入 IServiceProvider 实例
var userManager = Resolve<UserManager<ApplicationUser>>();
await signInManager.SignInAsync(userManager.FindByIdAsync(adminId), false); // here
Run Code Online (Sandbox Code Playgroud)
值不能为空。参数名称:提供程序位于 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider 提供程序),位于 Microsoft.AspNetCore.Identity.SignInManager
1.SignInAsync(TUser user, AuthenticationProperties authenticationProperties, String authenticationMethod) at UnitTests.TestBase1.ConfigureIdentity() in C:\Users\alexa\source\repos\octopusstore\UnitTests\ TestBase.cs:第 72 行
像这样解决
protected static ServiceCollection services = new ServiceCollection();
protected T Resolve<T>()
{
    var serviceProvider = services.BuildServiceProvider();
    return serviceProvider.GetRequiredService<T>();
}
Run Code Online (Sandbox Code Playgroud)
我如何注册依赖项,到目前为止它有效
services.AddDbContext<AppIdentityDbContext>();
var conf = new Mock<IConfiguration>();
services.AddSingleton<IConfiguration>(conf.Object);
services.AddSingleton<IServiceProvider, ServiceProvider>() ; // except for this
services.AddSingleton(services.BuildServiceProvider()); // and …Run Code Online (Sandbox Code Playgroud) 由于某种原因,我的RESTful应用允许在一定时间内允许来自Angular客户端的令牌过期请求。生成令牌:
private async Task<string> GenerateJwtToken(ApplicationUser user)
{
    var claims = new List<Claim>
    {
        new Claim(JwtRegisteredClaimNames.Sub, user.Email),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
        new Claim(ClaimTypes.NameIdentifier, user.Id)
    };
    claims.AddRange(await _userManager.GetClaimsAsync(user));
    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.GetSection("SigningKey").Value));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
    var expires = 
        DateTime.Now.AddSeconds(10);
        //DateTime.Now.AddDays(Convert.ToDouble(_configuration["ExpireDays"]));
    var token = new JwtSecurityToken(
        issuer: _configuration["Issuer"],
        audience: _configuration["Audience"],
        claims: claims,
        expires: expires,
        signingCredentials: creds);
    return new JwtSecurityTokenHandler().WriteToken(token);
}
Run Code Online (Sandbox Code Playgroud)
在客户端请求之前,我记录了到期时间,现在,如果现在超过了到期时间。两个成功请求的日志,但是最后一个应该失败
t:2018年9月18日星期二08:53:43 GMT + 0300(莫斯科标准时间)凭据服务.ts:101
现在:2018年9月18日星期二08:53:41 GMT + 0300(莫斯科标准时间)凭据服务:ts:102
假
真意味着过期
credits-service.ts:100 t:2018年9月18日星期二08:53:43 GMT + 0300(莫斯科标准时间)
credits-service.ts:101现在:2018年9月18日星期二08:58:01 GMT + 0300(莫斯科标准时间) …
我的任务是容器化遗留控制台工作应用程序,我在各处使用 async\await 重写了该应用程序。我的上级质疑我的选择,因为没有理由将其引入到独立的单线程应用程序中,因为线程池不太可能耗尽。我没有答案来证明使用它的合理性,除了它是相当长一段时间以来编写代码的标准方法之外。它有什么实质性的好处吗?
我有一个非常简单的应用程序,带有 CORS 中间件,它似乎工作正常,并且预检请求按预期工作。但由于某种原因,服务器根据实际请求响应 307。在浏览器中复制,邮递员工作正确。
func main() {
    router := gin.Default()
    router.Use(CORSMiddleware())
    accountsGroup := router.Group("/accounts")
    accountsGroup.POST("/", postAccount)
    router.Run("localhost:8080")
}
func CORSMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
    c.Header("Access-Control-Allow-Origin", "*")
    c.Header("Access-Control-Allow-Credentials", "true")
    c.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
    c.Header("Access-Control-Allow-Methods", "POST,HEAD,PATCH, OPTIONS, GET, PUT")
    if c.Request.Method == "OPTIONS" {
        c.AbortWithStatus(204)
        return
    }
    c.Next()
}
func postAccount(c *gin.Context) {
    response := gin.H{"id": 1}
    c.IndentedJSON(http.StatusCreated, response)
}
Run Code Online (Sandbox Code Playgroud)
飞行前响应
实际要求
服务器日志
[GIN-debug] Listening and serving HTTP on localhost:8080
[GIN] 2022/04/17 - 16:50:45 …Run Code Online (Sandbox Code Playgroud)