找不到与请求 URI 'http://localhost:xxx: 匹配的 HTTP 资源

No HTTP resource was found that matches the request URI 'http://localhost:xxx:

我正在开发 .net web api.....

Web Api Config :

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: "&nbsp;", 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);
        }

Get method/action is working fine in kendo grid but i face problem with put method/action(when we try to edit some record in grid)....

firebug.net 选项卡中的错误

Response : "Message": "No HTTP resource was found that matches the request 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\":\"adnan \"}]&_=1433486934719'.", > "MessageDetail": "No action was found on the controller 'Project' that matches the name 'put'."

json : "No action was found on the controller 'Project' that matches the name 'put'."

有没有路由错误或愚蠢的错误,请帮忙.... 任何类型的 hint/help 都非常感谢.... 谢谢你的时间

问题是您的 Web API 操作需要两个参数:

  • int id,请求中缺少它 URL
  • ProjectsDM projectsdm,可以从payload(请求体)中获取

您需要使用包含缺少的 id 参数的 URL。在路由模板中它是可选的,但是,如果它丢失,作为需要它的动作,动作不能被动作选择器选择。

因此,要么将 id 添加到 URL,要么从操作中删除 id 参数。