【问题标题】:GET 405 method not allowed不允许使用 GET 405 方法
【发布时间】:2013-03-23 23:56:07
【问题描述】:

这是我调用 web api 的 jquery 代码

var request = {
    RequestId: "123",
    DeviceId: "ACU-B2-01-R1",
    AccessType: "Unlock",
    LoginId: "tester",
    Password: "tester"
};

$.ajax({
    url: 'http://localhost:55208/api/accesspanel',
    type: 'POST',
    data: JSON.stringify(request),
    dataType: 'jsonp',
    contentType: "application/json;charset=utf-8",
    success: function (data) {
        alert("success");
        alert(JSON.stringify(data));
    },
    error: function (x, y, z) {
        alert(x + '\n' + y + '\n' + z);
    }
});

当我运行这段代码时,什么也没有发生。成功和错误块都不会被触发。在chrome的调试控制台中查看后,错误记录如下:

GET http://localhost:55208/api/accesspanel?callback=jQuery18203847100134007633_…22,%22LoginId%22:%22tester%22,%22Password%22:%22tester%22}&_=1364916423737 405 (Method Not Allowed) 
    send jquery.min.js:2
    p.extend.ajax jquery.min.js:2
    (anonymous function)

不过,我可以使用 C# 代码成功调用我的 web api 方法,如下所示:

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:55208/");

        var request = new DeviceAccessRequest
        {
            RequestId = Guid.NewGuid().ToString(),
            DeviceId = "ACU/B2/01/R1",
            AccessType ="Unlock",
            LoginId = "tester",
            Password = "tester" ,                    
        };
        var response = client.PostAsJsonAsync("api/accesspanel", request).Result;
        if (response.IsSuccessStatusCode)
        {
            var deviceAccessResponse = response.Content.ReadAsAsync<DeviceAccessResponse>().Result;

        }
    }

这是我的 web api 方法:

    [HttpPost]
    public HttpResponseMessage PostDeviceControl(DeviceAccessRequest deviceAccessRequest)
    {

        var deviceAccessResponse = new DeviceAccessResponse(deviceAccessRequest.RequestId)
            {
                Status = "OK"
            };
        var response = Request.CreateResponse<DeviceAccessResponse>(HttpStatusCode.OK, deviceAccessResponse);
        return response;
    }

【问题讨论】:

    标签: c# jquery json web-services asp.net-web-api


    【解决方案1】:

    您在控制台中看到 GET 请求的原因是您指定了仅适用于 GET 请求的 dataType: 'jsonp'(原因是 jQuery 将其转换为指向您指定的 url 的 &lt;script&gt; 标记) .如果您想使用 GET 以外的其他动词进行跨域 AJAX,则不能使用 JSONP。如果您需要使用其他动词(例如您的情况下的 POST),您有 2 个选项:

    • CORS。查看following video,它说明了如何在 Web API 上启用 CORS。显然,要使此功能正常运行,您的客户端浏览器需要 tio 支持
    • 您域上的服务器端网桥。这里的想法是在托管您的 javascript 代码的域上有一些服务器端脚本,它将 HTTP 请求发送到 API 并将响应返回给客户端。然后您将向您自己的域发送一个常规的 AJAX POST 请求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多