我一直在爲此進行了幾天的研究。我有一個現有的MVC 4項目,它使用實體框架來創建數據庫。該應用程序按預期工作,但我有一個新的要求,以添加web api到這個網站。這是一個引用數據庫,並且要求返回僅包含完整數據庫條目的有限信息的簡單引用。將WebApi添加到使用實體框架的現有MVC4應用程序
我的原始模型:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Exercise4.Models
{
public class Quote
{
public int QuoteID { get; set; }
[Required (ErrorMessage = "A Category Field Must be selected or a New one must be Created before continuing")]
public int CategoryID { get; set; }
[Display (Name="Quotation")]
[Required (ErrorMessage = "A Quotation is Required")]
public string QName { get; set; }
[Display (Name= "Author")]
[Required (ErrorMessage = "An Authors Name is Required\n Use 'Unknown' if needed")]
public string QAuthor { get; set; }
[Display (Name = "Category")]
public virtual Category category { get; set; }
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime Date { get; set; }
public int UserId { get; set; }
}
}
的簡單報價型號
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Exercise4.Models
{
public class SimpleQuote
{
public int Id { get; set; }
public string Quote { get; set; }
public string Author { get; set; }
public string Category { get; set; }
}
}
上下文(*注被automagicly添加SimpleQuote條目時我腳手架新QuoteApiController)
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace Exercise4.Models
{
public class QuoteContext : DbContext
{
public DbSet<Quote> Quotes { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<UserProfile> UserIds { get; set; }
public QuoteContext()
{
Configuration.ProxyCreationEnabled = false;
}
public DbSet<SimpleQuote> SimpleQuotes { get; set; }
}
}
訪問/ api/quoteapi /頁面時返回錯誤
'ObjectContent`1'類型無法序列化內容類型'application/xml;字符集= UTF-8' 。
很明顯,這個錯誤是因爲它試圖返回一個數據庫中不存在的SimpleQuote對象。
創建的API控制器。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using Exercise4.Models;
namespace Exercise4.Controllers
{
public class QuoteApiController : ApiController
{
private QuoteContext db = new QuoteContext();
// GET api/QuoteApi
public IEnumerable<SimpleQuote> GetSimpleQuotes()
{
return db.SimpleQuotes.AsEnumerable();
}
// GET api/QuoteApi/5
public SimpleQuote GetSimpleQuote(int id)
{
SimpleQuote simplequote = db.SimpleQuotes.Find(id);
if (simplequote == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return simplequote;
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
我要去哪兒。我無法返回數據庫中不存在的模型。如果我在api中更改了調用以返回可用的報價模型,但我只需要將報價,作者和類別作爲字符串返回。我只要返回控制器中的Quote對象,拿出我需要的信息,然後返回SimpleQuote對象?不知道該怎麼做。有什麼建議麼?
@jbolt:不要對顯着改變原始上下文的答案進行編輯。 – 2013-04-04 12:26:14