Я новичок как в .Net Core, так и в Entity Framework. Я пытаюсь изучить обе технологии, следуя некоторому руководству, но я борюсь. В моем проекте веб-API есть два контроллера: мастер сгенерировал ValuesController.cs, который создается при создании нового проекта Core Web API, и второй добавленный мной контроллер под названием FilesController.cs.
Мой appsettings.json:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"ConnectionStrings": {
" \"PropWorxConnection\"": "server=a.b.com;user id=propworx;persistsecurityinfo=True;database=abcde;password=12345"
}
}
Мой Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using MySQL.Data.EntityFrameworkCore.Extensions;
namespace PropWorxAPI
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<Models.PropWorxDbContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("PropWorxConnection")));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc();
}
}
}
Простая модель:
namespace PropWorxAPI.Models
{
[Table("files")]
public partial class File
{
public int ID { get; set; }
public string FileNum { get; set; }
}
}
Мой контекст:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
namespace PropWorxAPI.Models
{
public class PropWorxDbContext : DbContext
{
private readonly string _connectionString;
public PropWorxDbContext(string connectionString)
{
_connectionString = connectionString;
}
public PropWorxDbContext(DbContextOptions<PropWorxDbContext> options) : base(options)
{
}
public DbSet<Models.File> Files { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Models.File>().ToTable("Files");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL(_connectionString);
base.OnConfiguring(optionsBuilder);
}
}
}
и мой контроллер:
using Microsoft.AspNetCore.Mvc;
using PropWorxAPI.Models;
namespace PropWorxAPI.Controllers
{
[Route("api/[controller]")]
public class FilesController : Controller
{
private readonly PropWorxDbContext _context;
public FilesController(PropWorxDbContext context)
{
_context = context;
}
[HttpGet]
public string Get()
{
return "Controller Working!!!";
}
}
}
Теперь, когда я запускаю его (F5), он открывает Edge и переходит на http://localhost:51932/api/values. Это отображает этот вывод:
["значение1", "значение2"]
Так что по умолчанию используется ValuesController (как это изменить ???). В любом случае, важно то, что автоматически сгенерированный ValuesController работает. Теперь я вручную изменяю URL-адрес, чтобы указать на созданный мной FilesController, т.е.
http://localhost:51932/api/files
... и я получаю это:
Ошибка HTTP 500 Странно ... веб-сайт не может отображать эту страницу
Теперь, если я удалю аргумент контекста из моего FilesController, т.е. я перейду из:
public FilesController(PropWorxDbContext context)
{
_context = context;
}
to
public FilesController()
{
}
тогда он работает и правильно отображает:
это файловый контроллер
Есть идеи, почему? Спасибо и извините за слишком многословный пост ...