【问题标题】:NET6 API exceptionNET6​​ API 异常
【发布时间】:2022-10-15 13:06:21
【问题描述】:

我用 NET 6 创建了一个简单的 Web API 项目。

控制器:

[ApiController]
[Route("[controller]")]
public class MenuController : ControllerBase
{
    readonly UnitOfWork uow;

    public class MenuRequestDTO
    {
        public Guid? StoreOid { get; set; }
    }

    public MenuController(UnitOfWork _uow)
    {
        uow = _uow;
    }

    [HttpPost(Name = "full-download")]
    public async Task<WebMenu> MenuFullDownload(MenuRequestDTO data)
    {
        return await MenuDataHandler.GetFullMenu(uow, data.StoreOid!.Value);
    }
}

尝试调用 URL http://localhost:5253/Menu 时,我总是遇到此异常。

    System.InvalidOperationException: EntityTypes must be not null and contains minimum 1 item
   at Microsoft.Extensions.DependencyInjection.DataLayerFactory.<>c.<PrepareDataLayerFactoryFunc>b__3_3(Context ctx)
   at lambda_method2(Closure, Context)
   at Microsoft.Extensions.DependencyInjection.DataLayerFactory.<>c__DisplayClass3_0.<PrepareDataLayerFactoryFunc>b__21()
   at Microsoft.Extensions.DependencyInjection.XpoServiceCollectionExtensions.<>c__DisplayClass14_0`1.<AddXpoCustomSession>b__2(Guid key)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Microsoft.Extensions.DependencyInjection.XpoServiceCollectionExtensions.<>c__DisplayClass14_1`1.<AddXpoCustomSession>b__1(IServiceProvider sp)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass2_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
   at lambda_method11(Closure, IServiceProvider, Object[])
   at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

在任何用例中都没有通过谷歌找到异常消息。

有没有人暗示可能出了什么问题?

【问题讨论】:

  • 您的实体提供 null 而不是 value。根据描述中提到的 URL,您在控制器中没有任何 get 方法的另外 1 件事。与服务共享您的完整代码
  • 您的实体类型应该是不可为空的,但您传递了 null。请提供minimum reproducible example

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:

也许原因是您的MenuFullDownload 操作是HttpPost,错误消息似乎是请求没有正文,因为您在操作中设置了参数(MenuRequestDTO data)

使用迅雷客户端或邮递员

也许您可以使用Thunder ClientPost man 发送带有正文的请求

【讨论】:

  • 这是不正确的。他没有将Route 设置为full-download,而是设置了Name。完全不同。你读过这个问题吗?很明显端点正在被命中——请求来自 Swagger。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多