hii*_*t95 6 c# automapper .net-core asp.net-core
当我运行项目 netcore 时,我收到一条消息 {"stateMachine":{"<>1__state":-1,"<>t__builder":{ 我不知道如何解决这个问题。我在命令行中看到错误
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] 执行请求时发生未处理的异常。Newtonsoft.Json.JsonSerializationException:检测到类型为“System.Runtime.CompilerServices.AsyncTaskMethodBuilder”的属性“task”的自引用循环
和
Microsoft.AspNetCore.Server.Kestrel[13] 连接 ID“0HLFMHMJ7MBQN”,请求 ID“0HLFMHMJ7MBQN:00000001”:应用程序抛出了一个未处理的异常。Newtonsoft.Json.JsonSerializationException:检测到类型为“System.Runtime.CompilerServices.AsyncTaskMethodBuilder”的属性“task”的自引用循环
这是文件 Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("AppDbConnection"),
b => b.MigrationsAssembly("liyobe.Data")));
services.AddIdentity<AppUser, AppRole>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();
// Configure Identity
services.Configure<IdentityOptions>(options =>
{
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 6;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequireLowercase = false;
// Lockout settings
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
// User settings
options.User.RequireUniqueEmail = true;
});
services.AddAutoMapper();
// Add application services.
services.AddScoped<UserManager<AppUser>, UserManager<AppUser>>();
services.AddScoped<RoleManager<AppRole>, RoleManager<AppRole>>();
//CreateMapper(services, Configuration);
//services.AddSingleton(Mapper.Configuration);
services.AddScoped<IMapper>(sp => new Mapper(sp.GetRequiredService<AutoMapper.IConfigurationProvider>(), sp.GetService));
services.AddTransient(typeof(IUnitOfWork), typeof(EFUnitOfWork));
services.AddTransient(typeof(IAsyncRepository<,>), typeof(EFRepository<,>));
services.AddTransient<IFunctionService, FunctionService>();
services.AddTransient<DbInitializer>();
//services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/error");
}
//app.UseStaticFiles();
//app.UseHttpsRedirection();
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
这是我的文件 ValuesController
[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
IFunctionService _functionService;
public ValuesController(IFunctionService functionService)
{
_functionService = functionService;
}
// GET api/values
[HttpGet]
public async Task<IActionResult> Get()
{
try
{
var data = _functionService.GetAll("");
return Ok(data);
}
catch (Exception ex)
{
throw new Exception();
}
}
Run Code Online (Sandbox Code Playgroud)
这是 FunctionService 类中的函数 getAll
public async Task<List<FunctionViewModel>> GetAll(string functionId)
{
var query = await _functionRepository.ListAllAsync();
var result = _mapper.Map<List<Function>, List<FunctionViewModel>>(query);
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是类功能
public class FunctionViewModel
{
public string Id { get; set; }
[Required]
[StringLength(128)]
public string Name { set; get; }
[Required]
[StringLength(250)]
public string URL { set; get; }
[StringLength(128)]
public string ParentId { set; get; }
public string IconCss { get; set; }
public int SortOrder { set; get; }
public bool Status { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
这是类功能
[Table("Functions")]
public class Function : BaseEntity<string>, ISwitchable, ISortable
{
public Function()
{
}
public Function(string name, string url, string parentId, string iconCss, int sortOrder)
{
this.Name = name;
this.URL = url;
this.ParentId = parentId;
this.IconCss = iconCss;
this.SortOrder = sortOrder;
}
[Required]
[StringLength(128)]
public string Name { set; get; }
[Required]
[StringLength(250)]
public string URL { set; get; }
[StringLength(128)]
public string ParentId { set; get; }
public string IconCss { get; set; }
public int SortOrder { set; get; }
public bool Status { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
我看到在 FunctionService 中返回数据时发生错误。但我不知道如何解决这个问题。
小智 0
从控制器中的非异步调用调用异步任务时会发生此错误。所以基本上,当我们调用 _functionService.GetAll("") 时,我们缺少“await”。
它应该是:await _functionService.GetAll("");
// GET api/values
[HttpGet]
public async Task<IActionResult> Get()
{
try
{
var data = await _functionService.GetAll("");
return Ok(data);
}
catch (Exception ex)
{
throw new Exception();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2679 次 |
| 最近记录: |