如果get方法的元素数大于1,则Web API不会返回任何数据

时间:2019-02-25 23:49:19

标签: c# asp.net asp.net-web-api

Web api无法执行任何查询或获取返回数据库表中多个行的方法。我有一个公寓模型类,在其中添加了一个BuyerID,它是Buyers模型类的ID。买方类还包含公寓的集合。它返回此错误:

SqlNullValueException: Data is Null. This method or property cannot be
called on Null values

我的公寓模型课程是:

public class Apartment
    {
        [Key]
        public int ID { get; set; }
        public string Title { get; set; }
        public int NbofRooms { get; set; }
        public int Price { get; set; }
        public string Address { get; set; }
        public int BuyerId { get; set; } 

    }

我的买家班级是:

public class Buyer
    {
        [Key]
        public int ID { get; set; }
        public string FullName { get; set; }
        public int Credit { get; set; }
        public ICollection<Apartment> apartments { get; set; }
    }

我的公寓管理员是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Assignment2CME.Data;
using Assignment2CME.Models;
using Microsoft.AspNetCore.Cors;
using System.Diagnostics;
using System.Web.Http.Cors;

namespace Assignment2CME.Controllers
{
    [Produces("application/json")]
    [Route("api/Apartments")]
    [System.Web.Http.Cors.EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
    [Microsoft.AspNetCore.Cors.EnableCors("BuyersPolicy")]
    public class ApartmentsController : Controller
    {
        private readonly ApartmentContext _context;

        public ApartmentsController(ApartmentContext context)
        {

            _context = context;
        }

        // GET: api/Apartments
        [HttpGet]
        public IEnumerable<Apartment> GetApartments()
        {
            return _context.Apartments;
        }

        // GET: api/Apartments/5
        [HttpGet("{id}")]
        public async Task<IActionResult> GetApartment([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id);

            if (apartment == null)
            {
                return NotFound();
            }

            return Ok(apartment);
        }

        // GET: api/Apartments/5
        [HttpGet("Aparts/{id}")]
        public async Task<IActionResult> GetApar([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.Select(x => x).ToListAsync();

            if (apartment == null)
            {
                return NotFound();
            }

            return Ok(apartment);
        }

        // GET: api/Apartments/5
        [HttpGet("Title/{id}")]
        public async Task<IActionResult> GetTitle([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id);

            var title = apartment.Title;

            if (apartment == null)
            {
                return NotFound();
            }

            return Ok(title);
        }

        // GET: api/Apartments/address1/5
        [HttpGet("address1/{id}")]
        public async Task<IActionResult> ReturnAddress([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id);

            var address = apartment.Address;

            if (apartment == null)
            {
                return NotFound();
            }

            return Ok(address);
        }

        // GET: api/Apartments/Price/5
        [HttpGet("Price/{id}")]
        public async Task<IActionResult> GetPrice([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id);

            var price = apartment.Price;

            if (apartment == null)
            {
                return NotFound();
            }

            return Ok(price);
        }

        [HttpGet("NumberofRooms/{id}")]
        public async Task<IActionResult> GetNbofRooms([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id);

            var NumberofRooms = apartment.NbofRooms;

            if (apartment == null)
            {
                return NotFound();
            }

            return Ok(NumberofRooms);
        }

        // GET: api/Apartments/40000/70000
        [HttpGet("{fromPrice}/{toPrice}")]
        public async Task<IActionResult> GetFilteredApartment([FromRoute] int fromPrice,[FromRoute] int toPrice)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            if (fromPrice != 0 && toPrice != 0)
            {
                var apartment = await _context.Apartments.Where(s => s.Price >= fromPrice && s.Price <= toPrice).OrderByDescending(s => s.Price).ToListAsync();
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
            else if(fromPrice != 0)
            {
                var apartment = await _context.Apartments.Where(s => s.Price >= fromPrice).ToListAsync();
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
            else if (toPrice != 0)
            {
                var apartment = await _context.Apartments.Where(s => s.Price <= toPrice).ToListAsync();
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
            else
            {
                var apartment = _context.Apartments;
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
        }

        // GET: api/Apartments/Address/Beirut
        [HttpGet("Address/{address}")]
        public async Task<IActionResult> GetFilteredApartmentByAddress([FromRoute] string address)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            if (address != null)
            {
                var apartment = await _context.Apartments.Where(s => s.Address == address).OrderByDescending(s => s.Price).ToListAsync();
                if (apartment == null)
                {
                    return NotFound();
                }
                return Ok(apartment);
            }
            else
            {
                var apartment = _context.Apartments;
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
        }

        // GET: api/Apartments/NbofRooms/5
        [HttpGet("NbofRooms/{NbofRooms}")]
        public async Task<IActionResult> GetFilteredApartmentByNbofRooms([FromRoute] int NbofRooms)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            if (NbofRooms != 0)
            {
                var apartment = await _context.Apartments.Where(s => s.NbofRooms == NbofRooms).OrderByDescending(s => s.Price).ToListAsync();
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
            else
            {
                var apartment = _context.Apartments;
                if (apartment == null)
                {
                    return NotFound();
                }

                return Ok(apartment);
            }
        }

        // PUT: api/Apartments/5
        [HttpPut("{id}")]
        public async Task<IActionResult> PutApartment([FromRoute] int id, [FromBody] Apartment apartment)
        {
            if (!ModelState.IsValid)
            {
                var errors = ModelState.Values.SelectMany(v => v.Errors);
                return BadRequest(ModelState);
            }

            if (id != apartment.ID)
            {
                return BadRequest();
            }

            _context.Entry(apartment).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ApartmentExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return NoContent();
        }

        // POST: api/Apartments
        [HttpPost]
        public async Task<IActionResult> PostApartment([FromBody] Apartment apartment)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _context.Apartments.Add(apartment);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetApartment", new { id = apartment.ID }, apartment);
        }

        // DELETE: api/Apartments/5
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteApartment([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id);
            if (apartment == null)
            {
                return NotFound();
            }

            _context.Apartments.Remove(apartment);
            await _context.SaveChangesAsync();

            return Ok(apartment);
        }

        private bool ApartmentExists(int id)
        {
            return _context.Apartments.Any(e => e.ID == id);
        }
    }
}

这是我的上下文类:

public class ApartmentContext: DbContext
    {
        public ApartmentContext(DbContextOptions options) : base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }

        public DbSet<Apartment> Apartments { get; set; }
        public DbSet<Buyer> Buyers { get; set; }
    }

返回不止一个公寓的所有物品都无法正常工作。

0 个答案:

没有答案