asp.net核心网络api返回500服务器错误

时间:2018-07-29 04:03:42

标签: sql-server asp.net-core swagger azure-web-sites ef-core-2.0

我是asp.net Web API的新手。我正在使用EF Core处理数据。我在SQL Server中有两个表,USER_DATAWORK_DATA

我正在尝试发送HTTP GET请求并从WORK_DATA表中获取数据,但是响应是500错误,并且没有内容。我可以完全获取并发布到USER_DATA。我不仅可以获取WORK_DATA。我认为路由是正确的,并且SQL Server表的结构错误,但是我不知道如何解决。

SQL Server结构在这里:数据库有两个表USER_DATAWORK_DATA

USER_DATA具有以下列

Id (PK, varchar, notnull)
UserName (varchar, null)
RegisterDate (Date, null)
Field (varchar, null)
Password (varchar, null)
Heats (int, null)

WORK_DATA具有以下列

WorkId (PK, varchar, notnull)
WorkName (varchar, null)
Detailinformation (varchar, null)
Salary (varchar, null)
Worklength (varchar, null)
Reliability (int, null)
RegisterDate (date, null)
isCompleted (bit, null)
Id (varchar, not null)

外键为Id,其引用为USER_DATA.Id

模型在这里-Item对应于SQL Server中的USER_DATAWorkdata对应于WORK_DATA

项目

using System;
using System.Collections.Generic;

namespace NewHeats.Models
{
    public class Item
    {
        public string Id { get; set; }
        public string UserName { get; set; }
        public DateTime RegisterDate { get; set; }
        public string Field { get; set; }
        public string Password { get; set;}
        public int Heats { get; set; }
    }
}

工作数据

using System;
using Microsoft.EntityFrameworkCore;
using     System.ComponentModel.DataAnnotations.Schema;

namespace NewHeats.Models
{
    public class Workdata
    {
        public string WorkId { get; set; }
        public string WorkName { get; set; }
        public string DetailInformation { get; set; }
        public string Salary { get; set; }
        public string Worklength { get; set; }
        public int Reliability { get; set; }
        public DateTime RegisterDate { get; set; }
        public int isCompleted { get; set; }

        public string Id { get; set; }

        [ForeignKey("Id")]
        public Item Item { get; set; }
     }
}

DbContext:

using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;

namespace NewHeats.Models
{
    public class ItemRepository : DbContext ,IItemRepository
    {
        public ItemRepository(DbContextOptions<ItemRepository> options)
        : base(options)
        {
        }

        protected override void OnModelCreating (ModelBuilder modelBuilder)
        {
            try
            {
                modelBuilder.Entity<Item>(entity =>
                {
                    entity.HasKey(e => e.Id);
                    entity.ToTable("USER_DATA");
                });

                modelBuilder.Entity<Workdata>(entity =>
                {
                    entity.HasKey(e => e.WorkId);
                    entity.ToTable("WORK_DATA");
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }

        public virtual DbSet<Item> USER_DATA { get; set; }
        public virtual DbSet<Workdata> WORK_DATA { get; set; }

        public Item Get(string id)
        {
            return USER_DATA.FirstOrDefault(x => x.Id == id);
        }

        public IEnumerable<Item> GetAll()
        {
            return USER_DATA.ToList();
        }

        public void Add(Item item)
        {
            item.Id = Guid.NewGuid().ToString();
            USER_DATA.Add(item);
        }

        public Item Find(string id)
        {
            return USER_DATA.FirstOrDefault(x=>x.Id==id);
        }

        public Item Remove(string id)
        {
            return USER_DATA.FirstOrDefault(x => x.Id == id);
        }

        public void Update(Item item)
        {
            USER_DATA.Remove(USER_DATA.FirstOrDefault(x => x.Id == item.Id));
            USER_DATA.Add(item);
        }

        public Workdata GetWorkdata(string workId)
        {
            return WORK_DATA.FirstOrDefault(x => x.WorkId == workId);
        }

        public IEnumerable<Workdata> GetAllWorkdata()
        {
            return this.WORK_DATA.ToList();
        }

        public void AddWorkdata(Workdata workdata)
        {
            workdata.WorkId = Guid.NewGuid().ToString();
            WORK_DATA.Add(workdata);
        }

        public Workdata FindWorkdata(string workId)
        {
            return WORK_DATA.FirstOrDefault(x => x.WorkId == workId);
        }

        public Workdata RemoveWorkdata(string workId)
        {
            return WORK_DATA.FirstOrDefault(x => x.WorkId == workId);
        }

        public void UpdateWorkdata(Workdata workdata)
        {
            WORK_DATA.Remove(WORK_DATA.FirstOrDefault(x => x.WorkId == workdata.WorkId));
            WORK_DATA.Add(workdata);
        }
    }
}

IItemRepository

using System;
using System.Collections.Generic;
using System.Linq;

namespace NewHeats.Models
{
    public interface IItemRepository
    {
        void Add(Item item);
        void Update(Item item);
        Item Remove(string key);
        Item Get(string id);
        IEnumerable<Item> GetAll();
        void AddWorkdata(Workdata workdata);
        void UpdateWorkdata(Workdata workdata);
        Workdata RemoveWorkdata(string workid);
        Workdata GetWorkdata(string workid);
        IEnumerable<Workdata> GetAllWorkdata();
    }
}

控制器在这里

ItemController

对应于我在SQL Server中的USER_DATA表

using System;
using Microsoft.AspNetCore.Mvc;

using NewHeats.Models;

namespace NewHeats.Controllers
{
    [Route("api/[controller]")]
    public class ItemController : Controller
    {
        private ItemRepository _itemRepository;

        public ItemController(ItemRepository itemRepository)
        {
            _itemRepository = itemRepository;
        }

        [HttpGet]
        public IActionResult List()
        {           
            return Ok(_itemRepository.GetAll());
        }

        [HttpGet("{Id}")]
        public Item GetItem(string id)
        {
            Item item = _itemRepository.Get(id);
            return item;
        }

        [HttpPost]
        public IActionResult Create([FromBody]Item item)
        {
            try
            {
                if (item == null || !ModelState.IsValid)
                {
                    return BadRequest("Invalid State");
                }

                _itemRepository.Add(item);
                _itemRepository.SaveChanges();
            }
            catch (Exception)
            {
                return BadRequest("Error while creating");
            }
            return Ok(item);
        }

        [HttpPut]
        public IActionResult Edit([FromBody] Item item)
        {
            try
            {
                if (item == null || !ModelState.IsValid)
                {
                    return BadRequest("Invalid State");
                }

                _itemRepository.Update(item);
                 _itemRepository.SaveChanges();
            }
            catch (Exception)
            {
                return BadRequest("Error while creating");
            }

            return NoContent();
        }

        [HttpDelete("{Id}")]
        public void Delete(string id)
        {
            _itemRepository.Remove(id);
            _itemRepository.SaveChanges();
        }
    }
}

WorkdataController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using NewHeats.Models;

namespace NewHeats.MobileAppService.Controllers
{
    [Route("api/[controller]")]
    public class WorkdataController :Controller
    {
        private ItemRepository _itemRepository;

        public WorkdataController(ItemRepository itemRepository)
        {
            _itemRepository = itemRepository;
        }

        [HttpGet]
        public IActionResult List()
        {
             return Ok(_itemRepository.GetAllWorkdata());
        }

        [HttpGet("{WorkId}")]
        public Workdata GetItem(string workId)
        {
            Workdata workdata = _itemRepository.GetWorkdata(workId);
            return workdata;
        }

        [HttpPost]
        public IActionResult Create([FromBody]Workdata workdata)
        {
            try
            {
                if (workdata == null || !ModelState.IsValid)
                {
                    return BadRequest("Invalid State");
                }

                _itemRepository.AddWorkdata(workdata);
                _itemRepository.SaveChanges();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return BadRequest("Error while creating");
            }
            return Ok(workdata);
        }

        [HttpPut]
        public IActionResult Edit([FromBody] Workdata workdata)
        {
            try
            {
                if (workdata == null || !ModelState.IsValid)
                {
                    return BadRequest("Invalid State");
                }

                _itemRepository.UpdateWorkdata(workdata);
                _itemRepository.SaveChanges();
            }
            catch (Exception)
            {
                return BadRequest("Error while creating");
            }

            return NoContent();
        }

        [HttpDelete("{WorkId}")]
        public void Delete(string workId)
        {
            _itemRepository.RemoveWorkdata(workId);
            _itemRepository.SaveChanges();
        }
    }
}

我试图一周解决这个问题,但是我做不到。我搜索了很多stackoverflow,msdn等...请帮助我。

谢谢

0 个答案:

没有答案