【发布时间】:2015-06-05 07:15:18
【问题描述】:
我正在开发.net web api.....
Web API 配置:
public static void Register(HttpConfiguration config)
{
// Verb Routing
RouteTable.Routes.MapHttpRoute(
name: "SmallBizApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new
{
id = RouteParameter.Optional,
action = RouteParameter.Optional
}
);
config.Formatters.Clear();
config.Formatters.Insert(0, new SmallBiz.WebAPI.Common.JsonpFormatter());
}
我正在使用jsonp格式加载kendo-ui甘特图中的数据,可以看出...
<div id="grid"></div>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$(document).ready(function () {
var projectdata = "http://localhost:1799/api",
dataSource = new kendo.data.DataSource({
transport: {
read: {
url: projectdata + "/project",
dataType: "jsonp"
},
update: {
url: projectdata + "/project/put",
dataType: "jsonp"
},
destroy: {
url: projectdata + "/project/delete",
dataType: "jsonp"
},
create: {
url: projectdata + "/project/post",
dataType: "jsonp"
},
parameterMap: function (options, operation) {
if (operation !== "read" && options.models) {
return { models: kendo.stringify(options.models) };
}
}
},
batch: true,
pageSize: 20,
schema: {
model: {
id: "ProjectId",
fields: {
ProjectId: { editable: false, nullable: false },
Name: { validation: { required: true } },
Status: { validation: { required: true } },
IsActive: { type: "boolean" }
}
}
}
});
$("#grid").kendoGrid({
dataSource: dataSource,
pageable: true,
toolbar: ["create"],
scrollable: false,
sortable: true,
groupable: true,
columns: [
{ field: "Name", title: "Project Name", width: "170px" },
{ field: "Status", title: "Status", width: "110px" },
{ field: "IsActive", title: "Active", width: "50px" },
{ command: ["edit", "delete", "Setting","Task"], title: " ", width: "150px" }
],
editable: "popup"
});
});
</script>
控制器代码:
public IQueryable<ProjectsDM> GetProject()
{
return db.Project;
}
[HttpPut]
public IHttpActionResult PutProjectsDM(int id, ProjectsDM projectsdm)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != projectsdm.ProjectId)
{
return BadRequest();
}
db.Entry(projectsdm).State = EntityState.Modified;
try
{
projectsdm.ModifiedBy = "adnan";
projectsdm.ModifiedDate = DateTime.Now;
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!ProjectsDMExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
获取方法/动作在剑道网格中运行良好,但我面临问题 使用 put 方法/操作(当我们尝试在网格中编辑某些记录时)......
firebug .net 选项卡中的错误
响应:“消息”:“未找到与 请求 URI 'http://localhost:1799/api/project /put?callback=jQuery191012879030621062526_1433486934717&models=[{\"ProjectId\":2%2C\"ClientId\":1%2C \"FirmId\":1%2C\"Status\":\"Started\"%2C\"Name\":\"Flexi77\"%2C\"IsActive\":true%2C\"CreatedDate\": \"2015-06-03T00 :00:00\"%2C\"ModifiedDate\":\"2015-06-03T00:00:00\"%2C\"CreatedBy\":\"adnan\"%2C\"ModifiedBy\":\"阿德南 \"}]&_=1433486934719'.", > "MessageDetail": "在控制器 'Project' 上未找到任何操作 与名称 'put' 匹配。”
json : "在控制器 'Project' 上找不到匹配的操作 'put'这个名字。”
是否有一些路线错误或愚蠢的错误,请帮忙.... 非常感谢任何类型的提示/帮助.... 感谢您的宝贵时间
【问题讨论】:
-
试试这个网址:projectdata + "/project/PutProjectsDM"
-
感谢您的回复,我们检查了但它不工作...我猜这是 web api 配置问题
-
您使用哪种方法进行请求?你能确保它是PUT吗?您可以使用浏览器的控制台(按 F12)。
-
@JotaBe 是的,我确保它的 PUT
标签: json asp.net-mvc asp.net-web-api kendo-grid asp.net-mvc-routing