1

我试图从 Kendo Ui Grid 将数据发布到我的 web api

var crudServiceBaseUrl = "http://127.255.0.1:8081/api",
        dataSource = new kendo.data.DataSource({
            transport: {
                read:  {
                    url: crudServiceBaseUrl + "/meeting",
                    dataType: "jsonp",
                },
                update: {
                    type: "POST",
                    url: crudServiceBaseUrl + "/meeting/postmeeting",
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',

                    success: function (msg) {
                        alert("success");
                    }
                },

          .....


    $("#grid").kendoGrid({
        dataSource: dataSource,
        pageable: true,
        toolbar: ["create"],
        columns: [
            { field: "Organizer", title: "Organizer" },
            { field: "Title", title: "Title" },
            { field: "Location", title: "Location", },
            { command: ["edit", "destroy"], title: " ", width: "160px" }],

        editable: "inline"
    });

但是当我更新时

我收到 405 错误

Request URL:http://127.255.0.1:8081/api/meeting/postmeeting
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:POST
Host:127.255.0.1:8081
Origin:http://localhost:30320
Proxy-Connection:keep-alive

有人可以向我解释一下 request Method 是如何变成 OPTION 的吗?因此,我的 ASP.NET Web API 中的 POST 方法没有调用

  [HttpPost]
  public HttpResponseMessage PostMeeting(MeetingEntity meeting)
    {
        _meetingRepository.Update(meeting);
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
4

1 回答 1

1

如果是http://127.255.0.1:8081/api/meeting/postmeeting从访问http://localhost:30320,则为跨域请求。默认情况下,浏览器会阻止访问不同来源的资源。看看这个

跨域资源共享 ( CORS ) 是解决此限制的一种方法。由于您执行 POST,因此浏览器会发出预先发送的 CORS 请求,这基本上是一个 OPTIONS 请求。如果此 OPTIONS 请求导致带有必要 CORS 标头的响应,则浏览器将随后发出 POST 请求。您可以实现一个操作方法来处理 OPTIONS,但现在在 Web API 中启用 CORS 非常容易。检查此链接

于 2013-07-25T05:47:53.990 回答