我的 CreatedAtAction 有一个奇怪的问题,如果我的方法名称以“Async”关键字结尾,当我从我的 Add 方法返回 CreatedAtAction 时,我会收到 500 错误“没有路由与提供的值匹配”。如果我将其他任何内容作为方法名称,如 GetRatePlanAs、GetRatePlanAsyncA 或 GetRatePlan,那么它就像一个魅力。
如果我添加 [ActionName("GetRatePlanAsync")] 但我不想这样做,它也会起作用。
CreatedAtAction:
return CreatedAtAction(nameof(GetRatePlanAsync), new { ... }, null);
Run Code Online (Sandbox Code Playgroud)
不起作用:
[HttpGet]
[Route("item")]
public async Task<ActionResult> GetRatePlanAsync(...)
Run Code Online (Sandbox Code Playgroud)
作品:
[HttpGet]
[Route("item")]
[ActionName("GetRatePlanAsync")]
public async Task<ActionResult> GetRatePlanAsync(...)
Run Code Online (Sandbox Code Playgroud)
还工作:
[HttpGet]
[Route("item")]
public async Task<ActionResult> GetRatePlan(...)
Run Code Online (Sandbox Code Playgroud) 将 EF Core 3.1.5(从 2.2 迁移后)与 Autofac 5.2.0 一起使用时,我遇到了内存泄漏。我的情况是,在主页上我加载了一些产品列表,每次重新加载页面都会增加 5-10mb 的内存使用量,内存无休止地增加。它永远不会下降。我怀疑我的注册错误(?)或者这是因为 EF Core 中的跟踪行为(?)。我尝试注册我的MyDbContext
的如下:
public class DbContextModule<TContext> : Module
where TContext : DbContext
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder
.RegisterType<TContext>()
.WithParameter("options", DbContextOptionsFactory.Get<TContext>())
.InstancePerLifetimeScope();
}
}
public class DbContextOptionsFactory
{
public static DbContextOptions<TContext> Get<TContext>() where TContext : DbContext
{
var confSql = "fake";
var builder = new DbContextOptionsBuilder<TContext>();
DbContextConfigurer.Configure<TContext>(builder, confSql);
return builder.Options;
}
}
public class DbContextConfigurer
{
public static void Configure<TContext>(DbContextOptionsBuilder<TContext> builder, string connectionString) where …
Run Code Online (Sandbox Code Playgroud) 我试图在 Blazor 中拥有 2 个客户端项目和 1 个服务器项目。因此,我创建了一个新的 Blazor WebAssembly 应用程序,并选中了 https、asp.net Core 托管和渐进式 Web 应用程序检查。
现在我有 3 个自动生成的项目:客户端、服务器和共享项目。
假设我需要另一个必须与同一服务器通信的客户端项目。
我添加了一个新的 blazor 项目,选择 Blazor WebAssembly 应用程序,但这次我取消选中 ASP.NET Core 托管和渐进式 Web 应用程序(我不需要该应用程序离线工作)。
所以现在我有 2 个客户端,1 个服务器,1 个共享项目。
我要做的下一件事是将服务器的引用添加到新的客户端项目。
一切看起来都很好,直到出现此错误:
Blazor 静态资产 - 具有相同路径的冲突资产
我在 github 上找到了这个讨论:https://github.com/dotnet/aspnetcore/issues/20580
他们说你必须写入<StaticWebAssetBasePath>clientA</StaticWebAssetBasePath> <StaticWebAssetBasePath>clientB</StaticWebAssetBasePath>
你的客户项目。
当我单击错误时,Visual Studio 会显示一个名为 Microsoft.Net.Sdk.Razor.StaticWebAssets.targets 的文件,并将我带到第 191 行,即:
<ValidateStaticWebAssetsUniquePaths
StaticWebAssets="@(_ReferencedStaticWebAssets)"
WebRootFiles="@(_WebRootFiles)" />
Run Code Online (Sandbox Code Playgroud)
我认为我不需要修改这个文件,那么我应该修改什么?
我有两个应用程序,其中一个托管在 Azure 应用服务 (.NET Framework 4.8) 中,并公开(除其他外)两个接收 POST 请求的端点:
端点A:
[AcceptVerbs("GET", "POST")]
public async Task<HttpResponseMessage> EndpointA([FromUri]Guid sessionId, [FromUri]Guid transactionId, [FromBody]ADataDTO data)
Run Code Online (Sandbox Code Playgroud)
端点B:
[AcceptVerbs("GET", "POST")]
public async Task<HttpResponseMessage> EndpointB(Guid sessionId, Guid transactionId, [FromBody] BDataDTO data)
Run Code Online (Sandbox Code Playgroud)
使用 HttpClient.PostAsync 方法以相同的方式调用这两个端点:
public async Task CallEndpointAAsync(string callbackUrl, ADataDTO data)
{
//... validations
var httpClient = httpClientFactory.CreateClient();
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
var jsonObject = JsonConvert.SerializeObject(data, jsonSerializerSettings);
var content = new StringContent(jsonObject, Encoding.UTF8, "application/json");
await httpClient.PostAsync(callbackUrl, content);
}
Run Code Online (Sandbox Code Playgroud)
和
public async Task CallEndpointBAsync(string callbackUrl, BDataDTO data)
{
//... validations …
Run Code Online (Sandbox Code Playgroud)