代码之家  ›  专栏  ›  技术社区  ›  michasaucer

带有SQL Server和EFCORE 2的ASP.NET核心WebAPI

  •  0
  • michasaucer  · 技术社区  · 7 年前

    我正在尝试用SQL Server和Entity Framework Core 2创建我的第一个.NET核心Web API,但是当我在项目构建时从浏览器调用端点时,什么也得不到。它总是停留在“你好,世界”的启动页面上。

    如何正确地从RESTAPI获取数据?

    首先,我的模型类:

    public class Project
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

    用一个 DbContext :

    public class TaskManagerDbContext : DbContext
    {
        public TaskManagerDbContext(DbContextOptions<TaskManagerDbContext> options) : base(options) { }
    
        public DbSet<Project> Projects { get; set; }
    }
    

    然后我将两条记录硬编码到数据库中:

    enter image description here

    我生成 ProjectsController 通过在实体框架的基础上构建一个带有R/W的API。这个 get 函数如下(我认为没有必要显示所有控制器,因为它是由脚手架生成的):

    [Route("api/[controller]")]
    [ApiController]
    public class ProjectsController : ControllerBase
    {
        private readonly TaskManagerDbContext _context;
    
        public ProjectsController(TaskManagerDbContext context)
        {
            _context = context;
        }
    
        // GET: api/Projects
        [HttpGet]
        public IEnumerable<Project> GetProjects()
        {
            return _context.Projects;
        }
    
        // GET: api/Projects/5
        [HttpGet("{id}")]
        public async Task<IActionResult> GetProject([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
    
            var project = await _context.Projects.FindAsync(id);
    
            if (project == null)
            {
                return NotFound();
            }
    
            return Ok(project);
        }
    }
    

    最后,我的 Startup.cs :

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddDbContext<TaskManagerDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        }
    
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
    
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
    
            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
    

    问题是,通过API端点从我的数据库中获取数据需要做什么更改?现在,当我尝试调用端点时,它总是停留在“hello world”页面上。

    enter image description here

    我的连接字符串在 appsettings.json 项目目录中的文件。

    谢谢你的建议!

    1 回复  |  直到 7 年前
        1
  •  4
  •   Silvermind    7 年前

    对于一个空的ASP核心项目,模板中还剩下一些剩余部分。

    只需删除整个块,因为您不需要它:

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });