[英]ASP.Net MVC Web Api Function returning error for entirely different call
我有以下Api控制器:
public class FamilyController : ApiController
{
ApplicationDb db = new ApplicationDb();
public IEnumerable<Family> GetFamilies()
{
return db.Families.AsNoTracking().OrderBy(n => n.FamilyName);
}
public Family GetFamily(int id)
{
return db.Families.AsNoTracking().Single(n => n.FamilyID == id);
}
}
以下名为function.js的javascript文件
(function () {
window.dbApp = window.dbApp || {};
// Private: Routes
var familiesUrl = function () { return "/api/family/getfamilies" },
familyUrl = function (id) { return "/api/family/getfamily?id=" + id };
// Private: Ajax helper
function ajaxRequest(type, url, data) {
var options = { dataType: "json", contentType: "application/json", cache: false, type: type, data: ko.toJSON(data) }
return $.ajax(url, options);
}
// Public: Methods
window.dbApp.Db = {
getFamilies: function() {
return ajaxRequest("get",familiesUrl());
},
getFamily: function (id) {
return ajaxRequest("get", familyUrl(id));
},
};
})();
并在视图上显示以下javascript:
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/functions")
<script type="text/javascript">
function viewModel() {
var self = this;
self.Families = ko.observableArray([]);
self.Init = function () {
dbApp.Db.getFamilies()
.done(function (data) {
self.Families(data);
});
};
self.Init();
}
var model = new viewModel();
ko.applyBindings(model);
</script>
但是我收到以下错误消息:参数字典包含空值类型为'System.Int32'的参数'id'的空条目,该类型为'MadcapsPortal.Controllers.FamilyController'中的'MadcapsPortal.Models.Family GetFamily(Int32)'方法的”。 可选参数必须是引用类型,可为空的类型,或者必须声明为可选参数。
就像调用了错误的函数一样。 奇怪的是,使用以下内容的另一个页面工作正常吗?
var passedId = @ViewBag.PassedID;
function viewModel() {
var self = this;
self.Family = ko.observable();
self.FamilyName = ko.observable();
self.Init = function() {
dbApp.Db.getFamily(passedId)
.done(function(data){
self.Family(data);
self.FamilyName(data.FamilyName);
});
};
self.Init();
}
var model = new viewModel();
ko.applyBindings(model);
您应该使用以下URL:
GET /api/family
GET /api/family/2
或GET /api/family?id=2
请阅读以下内容以获取有关ASP.NET Web API路由的更多信息:
但基本上:从URL到操作方法的映射主要取决于操作方法名称和方法签名中的HTTP方法和模式。 GET /api/family
将映射到名称类似于get且不包含其他参数的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.