【问题标题】:No HTTP resource was found that matches the request URI 'http://localhost:xxx:未找到与请求 URI 'http://localhost:xxx: 匹配的 HTTP 资源:
【发布时间】: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: "&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);
        }

获取方法/动作在剑道网格中运行良好,但我面临问题 使用 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


【解决方案1】:

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

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

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

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

【讨论】:

  • 我在 url 中传递 id,对吗?更新:{ url: projectdata + "/Project/Put/id", dataType: "jsonp" },
  • 在 URL 中,您必须指定操作名称,PutProjectsDM,而不是 Put。那个位置的id是正确的
猜你喜欢
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2016-12-01
  • 1970-01-01
  • 2016-01-26
  • 2017-06-17
相关资源
最近更新 更多