getJSON 不调用 Web API 方法
Posted
技术标签:
【中文标题】getJSON 不调用 Web API 方法【英文标题】:getJSON doesnt call webAPI method 【发布时间】:2013-09-24 06:54:02 【问题描述】:我是 mvc 4 和 webAPI 的新手,我正在开发我的第一个应用程序。它是单页应用程序并使用 Knockoutjs。我使用此演练https://github.com/geersch/KnockoutSpa/ 我的 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>
$(function ()
ko.applyBindings(viewModel);
viewModel.loadNqsales();
);
var viewModel =
nqsales: ko.observableArray([]),
loadNqsales: function ()
var self = this;
$.getJSON(
'@Url.RouteUrl("DefaultApi", new httproute = "", controller = "NQSale" )',
function (nqsales)
self.nqsales.removeAll();
$.each(nqsales, function (index, item)
self.nqsales.push(new nqsale(item));
);
);
;
function nqsale(nqsale)
this.expenceFormNo = ko.observable(nqsale.a);
this.orderNo = ko.observable(nqsale.b);
this.date = ko.observable(nqsale.c);
WebAPI控制器
// GET api/NQSale
public IEnumerable<NQSaleDto> GetNQSales()
//return db.NQSales.AsEnumerable();
return db.NQSales
.AsEnumerable()
.Select(nqlist => new NQSaleDto(nqlist));
【问题讨论】:
【参考方案1】:你的Url构造
@Url.RouteUrl("DefaultApi", new httproute = "", controller = "NQSale" )
应该生成一个 '/api/NQSale' 的 URL,这意味着你的控制器应该如下:
//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));
默认情况下,API 的路由是控制器的名称(NQSaleController)与路径相关,Action 的名称(Get)与 HttpVerb 相关。
【讨论】:
【参考方案2】:我猜你的 Url 没有正确生成。如果当前视图中的 Javascript 或在单独的文件中? @Url 只有在视图中才有效。
【讨论】:
@Url 在视图中,它似乎生成正确。它是我在 firebug 中看到的:loadNqsales: function () var self = this; $.getJSON('/api/NQSale', function (nqsales) self.nqsales.removeAll(); $.each(nqsales, function (index, item) self.nqsales.push(new nqsale(item)); );以上是关于getJSON 不调用 Web API 方法的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API - 请求的资源不支持 http 方法“GET”