C# getJSON不调用webAPI方法
我是MVC4和webAPI的新手,正在开发我的第一个应用程序。它是单页应用程序,使用Knockoutjs。我使用本演练C# getJSON不调用webAPI方法,c#,javascript,asp.net-mvc-4,knockout.js,asp.net-web-api,C#,Javascript,Asp.net Mvc 4,Knockout.js,Asp.net Web Api,我是MVC4和webAPI的新手,正在开发我的第一个应用程序。它是单页应用程序,使用Knockoutjs。我使用本演练 我的webAPI方法一切正常,当我使用Fiddler调用方法时,它返回正确的值。但当我从getJson()方法使用它时,它从未调用过。以下是我的HTML: <table id="nqsales" class="table table-striped table-hover table-condensed"> <thead>
我的webAPI方法一切正常,当我使用Fiddler调用方法时,它返回正确的值。但当我从getJson()方法使用它时,它从未调用过。以下是我的HTML:
<table id="nqsales" class="table table-striped table-hover table-condensed">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
</thead>
<tbody data-bind="foreach: viewModel.nqsales">
<tr>
<td data-bind="text: a"></td>
<td data-bind="text: b"></td>
<td data-bind="text: c"></td>
</tr>
</tbody>
</table>
网络控制器
// GET api/NQSale
public IEnumerable<NQSaleDto> GetNQSales()
{
//return db.NQSales.AsEnumerable();
return db.NQSales
.AsEnumerable()
.Select(nqlist => new NQSaleDto(nqlist));
}
//获取api/NQSale
公共IEnumerable GetNQSales()
{
//返回db.NQSales.AsEnumerable();
返回db.NQSales
.可计算的()
.Select(nqlist=>newnqsaledto(nqlist));
}
我猜您的Url没有正确生成。如果当前视图中的Javascript是在一个单独的文件中@Url仅在其位于视图中时有效 您的Url结构
@Url.RouteUrl(“DefaultApi”,新的{httproute=”“,控制器=
“NQSale”})
应生成一个URL“/api/NQSale”,这意味着您的控制器应为:
//The controller name relates to the route
public class NQSaleController : ApiController
{
// The action name relates to the HttpVerb
public IEnumerable<NQSaleDto> Get()
{
//return db.NQSales.AsEnumerable();
return db.NQSales
.AsEnumerable()
.Select(nqlist => new NQSaleDto(nqlist));
}
}
//控制器名称与路由相关
公共类NQSaleController:ApiController
{
//动作名称与HttpVerb相关
公共IEnumerable Get()
{
//返回db.NQSales.AsEnumerable();
返回db.NQSales
.可计算的()
.Select(nqlist=>newnqsaledto(nqlist));
}
}
默认情况下,API的路由是控制器的名称(NQSaleController)与路径相关,操作的名称(Get)与HttpVerb相关。@Url在视图中,并且似乎生成正确。这是我在firebug中看到的:loadNqsales:function(){var self=this;$.getJSON('/API/NQSale',function(nqsales){self.nqsales.removeAll();$.each(nqsales,函数(索引,项){self.nqsales.push(新的nqsale(项));});}
//The controller name relates to the route
public class NQSaleController : ApiController
{
// The action name relates to the HttpVerb
public IEnumerable<NQSaleDto> Get()
{
//return db.NQSales.AsEnumerable();
return db.NQSales
.AsEnumerable()
.Select(nqlist => new NQSaleDto(nqlist));
}
}