我试图在VS 2010 Web应用程序中进行ASP.NET Web Api CRUD操作,但为什么结果不会从源表返回所有整行 .
这是我的代码:
路线/ Globax.asax
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}", // browse with localhost:7031/api/product
//routeTemplate: "{controller}/{id}", // browse with localhost:7031/product
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Controller / ProductController.cs:
public class ProductController : ApiController
{
NorthwindEntities db = new NorthwindEntities();
public List<Product> GetAll()
{
return db.Products.ToList<Product>();// ;
}
查看/ ViewProduct.aspx:
<script src="Script/jquery-1.7.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$('#<%= cviewproduct.ClientID %>').click(function (e) {
getProducts();
e.preventDefault();
});
});
function getProducts() {
$.getJSON("/api/product",
function (data) {
$.each(data, function (key, val) {
//var str = val.ProductName;
// alert(str);
var row = '<tr> <td>' + val.ProductName + '</td><td>' + val.ProductID + '</td><tr/>';
$(row).appendTo($('#tblproduct'));
});
});
}
</script>
Bellow是产品控制器通过'http://localhost:7031/api/product'的结果:
Bellow是getProducts()函数的结果:
请帮我 .
有什么想法或建议吗?
3 回答
当您执行
$.getJSON("/api/product", ...
时,您没有收到您发布的XML . 你回来了JSON .作为第一步,我建议您下载并安装Fiddler2 . 打开它,然后使用Composer选项卡为
http://localhost:7031/api/product
执行GET . 这应该会显示返回的JSON,它将与XML不同 . 将JSON发布到您原来的问题,我们应该能够进一步提供帮助 .我的猜测是JSON格式不正确 . 您的WebApiConfig.cs类是什么样的?
Update
是的,还有更好的方法 . 首先,创建一个ApiModel(ApiModel是WebAPI,ViewModel是MVC):
现在,从控制器返回此而不是实体:
如果您使用了AutoMapper,则可以使控制器代码更短:
做了一些研究后,我最终找到了(请纠正我,如果我错了):JavaScriptSerializer无法从实体和其他实体(产品和类别)之间的关系序列化整个对象树 .
所以..我对我的代码做了一些更改,结果如预期的那样
Controller/ProductController.cs :
From :
To :
View/ViewProduct.aspx :
From :
To :
或者......有没有比这更好的方法,
如果我仍然想传递一个实体对象而不是一个字符串对象(List GetAll()...而不是GetAll string()....)
问候,
安德里安
所以..这是我的最终工作准则
Models :
命名空间MyLabs1.Models
Controller/ProductController.cs :
OR
View/ViewProduct.aspx :
Hope This Will Be Helpful to Others
问候,
安德里安