【发布时间】: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