小编Mar*_*rko的帖子

ASP.NET核心模型绑定错误消息本地化

我正在使用ASP.NET Core,并尝试本地化应用程序.我设法使用新的 asp .net核心资源来本地化控制器和视图,并使用资源来本地化错误消息以进行模型验证.但是,当错误消息未链接到模型字段注释(如"必需")并且模型绑定的数据不正确时(如预期数字的文本),我收到如下错误,我是无法本地化:

"值'abc'对ID无效."

当我进入abcID房地产View,因为模型绑定无法做到的领域,它显示为近场验证消息,称"值'ABC’是无效的ID." .这是我正在使用的课程:

public class Country : IHasID
{
    public int ID { get; set; }

    [Required(ErrorMessageResourceType = typeof(L.Val),
    ErrorMessageResourceName = "NameR")]
    [MaxLength(100, ErrorMessageResourceType = typeof(L.Val), 
    ErrorMessageResourceName = "Max")]
    public string Name { get; set; }

    /*Some other properties*/
}
Run Code Online (Sandbox Code Playgroud)

我在互联网上发现的类似问题要么针对较旧的asp .net版本,否则无法解决问题.

.net c# localization asp.net-core asp.net-core-localization

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

调试 .NET Core 源代码 (Visual Studio 2019)

我使用 Visual Studio 2019 和 .NET Core 3 Web 应用程序。我想调试 .NET Core 源代码,所以当发生错误时,我可以深入研究代码并更详细地检查它。由于我找不到有关如何执行此操作的确切描述(即使在 Microsoft 文档站点上),我将尝试在此处总结我目前所知道的内容。

我在 Visual Studio 中有以下选项:

  1. 仅启用我的代码
  2. 启用 .NET 框架源步进
  3. 启用源服务器支持
  4. 启用源链接支持

前两个选项是互斥的。我想我应该选择第二个选项,虽然我不明白这个选项中的天气“.NET 框架”包括 .NET Core?

现在 .NET Core 是开源的并且可以在 GitHub 上使用,我不明白第三种与第四种选择。第三个应该允许我从 Microsoft 符号服务器中提取源代码(符号包含源代码吗?)而第四个应该允许我从 GitHub 中提取源代码?我需要一个还是另一个?

首先,我在Main方法中的CreateHostBuilder 上放置一个断点,选择第三个选项并运行应用程序。断点被击中后,我继续单步执行代码 ( F11),直到出现一条消息“未找到 GenericHostBuilderExtensions.cs”。它让我可以浏览它,但我不知道在哪里可以找到它。

让我们再试一次,这次选择第四个选项(并取消选择第三个)。现在,在断点被击中后,Visual Studio 让我通过Source Link下载前面提到的文件。我接受,但结果是消息

源链接错误:Azure DevOps:所有帐户的身份验证失败。使用“文件 -> 帐户设置...”添加新帐户或刷新凭据。

好吧,我使用我的 Microsoft 帐户登录。我还应该做什么?

我再重复一遍,这次选择第三和第四个选项。结果是一样的。

现在我选择另一个Source Link选项:“Fall back to Git Credential manager...”并重新开始。同样的结果。

当然,我在谷歌上广泛搜索并花了很多时间试图找到解决方案,但我遗漏了一些东西。我非常感谢您对上述选项的具体作用以及如何通过单步调试 .NET Core 源代码提供帮助。

debugging visual-studio-debugging asp.net-core visual-studio-2019

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

asp net core导出到Excel

我不确定这个问题是否可以发布在这里,但我认为它可能对许多程序员感兴趣.我需要一个能够为我提供创建Excel文件界面的包.我查看了nuget并发现了几个包,但没有一个支持asp net core.

excel asp.net-core-mvc

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

asp net core - 文件下载结果是FileNotFoundException

我正在尝试进行简单的文件下载,但它会导致FileNotFoundException.

控制器中的代码:

public FileResult DownloadFile()
{
    var fileName = "1.pdf";
    var filePath = env.WebRootPath + "\\" + fileName;
    var fileExists = System.IO.File.Exists(filePath);
    return File(filePath, "application/pdf", fileName);
}
Run Code Online (Sandbox Code Playgroud)

(调试变量fileExists表明它已设置为true.)

视图中的代码:

@Html.ActionLink("Download", "DownloadFile")
Run Code Online (Sandbox Code Playgroud)

来自日志的消息:

2017-03-12 09:28:45 [INF] Executing action method "Team.Controllers.ModulesExController.DownloadFile (Team)" with arguments (null) - ModelState is Valid
2017-03-12 09:28:45 [DBG] Executed action method "Team.Controllers.ModulesExController.DownloadFile (Team)", returned result "Microsoft.AspNetCore.Mvc.VirtualFileResult".
2017-03-12 09:28:45 [INF] Executing FileResult, sending file as "1.pdf"
2017-03-12 09:28:45 [INF] Executed action "Team.Controllers.ModulesExController.DownloadFile (Team)" in 0.8238ms
2017-03-12 09:28:45 [DBG] System.IO.FileNotFoundException …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc download

9
推荐指数
2
解决办法
3772
查看次数

从ASP.NET Core 1.1 MVC迁移到2.0后,自定义cookie身份验证无法正常工作

我已经将ASP.NET Core 1.1 MVC项目迁移到ASP.NET Core 2.0,现在我注意到对应用程序的未授权部分的请求不再导致"401 Unauthorized"响应,而是导致响应的代码异常" 500内部服务器错误".

日志文件的示例摘录(John Smith无权访问他尝试访问的控制器操作):

2018-01-02 19:58:23 [DBG] Request successfully matched the route with name '"modules"' and template '"m/{ModuleName}"'.
2018-01-02 19:58:23 [DBG] Executing action "Team.Controllers.ModulesController.Index (Team)"
2018-01-02 19:58:23 [INF] Authorization failed for user: "John Smith".
2018-01-02 19:58:23 [INF] Authorization failed for the request at filter '"Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter"'.
2018-01-02 19:58:23 [INF] Executing ForbidResult with authentication schemes ([]).
2018-01-02 19:58:23 [INF] Executed action "Team.Controllers.ModulesController.Index (Team)" in 146.1146ms
2018-01-02 19:58:23 [DBG] System.InvalidOperationException occurred, checking if Entity Framework recorded this …
Run Code Online (Sandbox Code Playgroud)

c# authentication authorization asp.net-core-mvc asp.net-core

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

Entify Framework - async选择where条件

我正在使用ASP.NET Core和Entity Framework.

首先,我选择一个员工,然后选择满足条件的所有员工(为了显示有效的工作):

var a = db.Employee.FirstOrDefault();
var b = db.Employee.Where(x => x.FirstName == "Jack");
Run Code Online (Sandbox Code Playgroud)

现在我尝试相同,但异步:

var c = await db.Employee.FirstOrDefaultAsync();
var d = await db.Employee.Where(x => x.FirstName == "Jack");
Run Code Online (Sandbox Code Playgroud)

但是,对于"WHERE",没有异步版本,第二行代码无法编译 - 我收到错误

...不包含GetAwaiter的定义......

如何执行SELECTWHERE在这种情况下的条件?


好的,从答案中我看到ToListAsync()将解析"var d = ..."行.但是,这个问题有一个延续,我之前并不知道这很重要.在这种情况下,我只是试图选择一组将被删除的记录,我对访问数据不感兴趣,以便在代码中进一步操作它.所以我修改了所有4个代码版本,目的是同步或异步删除一个或多个记录.为什么只有最后一个需要ToListAsync(),实际上不会从数据库中检索记录?

var a = db.Employee.FirstOrDefault();
db.Employee.Remove(a);
// db.Employee.RemoveRange(a); <- this also works?
db.SaveChanges();

var b = db.Employee.Where(x => x.FirstName == "Jack");
db.Employee.RemoveRange(b);
db.SaveChanges();

var c = await db.Employee.FirstOrDefaultAsync();
db.Employee.Remove(c);
await db.SaveChangesAsync();

var d = await db.Employee.Where(x => …
Run Code Online (Sandbox Code Playgroud)

c# select asynchronous entity-framework

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

使用 .Net Core API 进行元组序列化

我无法序列化元组。我创建一个模板 VS2019 .Net Core API 项目并将控制器替换为:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    [HttpGet]
    public List<(int number, string text)> Get()
    {
        var x = new List<(int number, string text)>
        {
            (1, "one"),
            (2, "two"),
            (3, "three")
        };
        return x;
    }

    /*[HttpGet]
    public List<string> Get()
    {
        var x = new List<string>
        {
            "one",
            "two",
            "three"
        };
        return x;
    }*/
}
Run Code Online (Sandbox Code Playgroud)

调用时,第一个方法将返回:[{},{},{}] 第二个方法(未注释时):["one","two","three"]

为什么元组没有序列化?这个例子很容易重现。

serialization .net-core asp.net-core

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

asp net core实体框架-无法访问已处置的对象

下面的代码:

public async static Task<List<RecentTask>> GetRecentTasks(ApplicationDbContext db,
    int EmployeeID, int NewTaskID, ILogger<HomeController> logger)
{
    var TaskList = await db.RecentTask.ToListAsync(); // without this line - no exception

    var t = new RecentTask();
    t.EmployeeID = EmployeeID;
    t.TaskDefinitionID = NewTaskID;
    db.RecentTask.Add(t);
    await db.SaveChangesAsync(); // EXCEPTION!

    return TaskList;
}
Run Code Online (Sandbox Code Playgroud)

导致异常:

无法访问已处置的对象。导致此错误的一个常见原因是处置从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例。如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。如果您使用依赖项注入,则应该让依赖项注入容器负责处理上下文实例。对象名称:“ApplicationDbContext”。

删除第一行将导致异常消失。我不知道如何db处理该对象。有谁知道这里发生了什么?

asp.net entity-framework

5
推荐指数
0
解决办法
1506
查看次数

我无法调试 .NET Core 源代码

是的,我知道这个问题时常出现,我在互联网上搜索了答案,但似乎没有任何效果。因此,我准备了详细的解释,并附有屏幕截图,说明我尝试做什么以便能够通过 .NET Core 源代码跟踪代码执行以及结果是什么。

我正在使用 Visual Studio Community 16.8.3,并从模板创建了 .NET Core 3.1 Web 应用程序。我更改了 Startup 类中的代码以使其崩溃。

在此输入图像描述

这些是我的调试设置(我不知道 .NET Framework 源代码步进对于 .NET Core 项目有什么意义):

在此输入图像描述

因此,让我们运行并遇到异常:

在此输入图像描述

在这里,我将选择仅反编译源代码(上一张图片上有一个链接),看看这是否有效:

在此输入图像描述

好的,但我只看到代码,无法检查变量和对象值。让我们重新运行一下,看看当异常发生时是否可以通过单击符号服务器来获取代码:

在此输入图像描述

它抱怨,所以让我们启用源服务器。

在此输入图像描述

让我们再次运行它,并遇到异常。

在此输入图像描述

现在它抱怨某种排除(请参阅符号状态列):

在此输入图像描述

我手动加载所有符号:

在此输入图像描述

在这里,我重新运行应用程序,并加载了所有符号,但是当发生异常时,我仍然无法按 F11 进入 .NET Core 源代码:

在此输入图像描述

我缺少什么才能逐步浏览 .NET Core 源代码?

c# debugging visual-studio .net-core asp.net-core

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

asp .net core - 自定义验证错误未显示在视图中

这是我的数据模型,它包括一个自定义验证:

public class MyData : IValidatableObject
{
    public int ID { get; set; }
    public int number { get; set; }

    [Required]
    public string text { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (text.Length < number)
        {
            yield return new ValidationResult(
                "Text too short, must be at least: " + number.ToString(),
                new[] { "number" });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我观点的一部分:

<div class="form-group">
    <label asp-for="number" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="number" class="form-control" />
        <span asp-validation-for="number" class="text-danger" />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

自定义验证错误文本永远不会显示在 …

validation html-helper asp.net-core

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

DbSet&lt;something&gt; 的 C# 泛型

我有各种方法应该能够调用将 DbSet 作为参数传递的通用方法。目前我有这个工作代码(此处简化显示):

public class MyClass
{
  private async Task<JsonResult> Delete<T>(int? id, T dbs) where T : DbSet<A>
  {
      var row = await dbs.SingleOrDefaultAsync(m => m.ID == id);
      dbs.Remove(row);
      await db.SaveChangesAsync();
      return Json(r); // definition od "r" removed from code to simplify it
  }

  public async Task<JsonResult> A(int? id)
  {
      return await Delete(id, db.A);
  }

  public async Task<JsonResult> B(int? id)
  {
      return await Delete(id, db.B);
  }

  public async Task<JsonResult> C(int? id)
  {
      return await Delete(id, db.C);
  }
Run Code Online (Sandbox Code Playgroud)

我不知道要修改“删除”方法的签名,以便方法 A、B、C... 都可以调用它。

c# generics

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