簡體   English   中英

不允許使用GET 405方法

[英]GET 405 method not allowed

這是我調用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;
    }

在控制台中看到GET請求的原因是因為您指定了dataType: 'jsonp' ,它僅適用於GET請求(其原因是jQuery將其轉換為指向您指定的url的<script>標記)。 如果要使用除GET以外的其他動詞進行跨域AJAX,則不能使用JSONP。 如果您需要使用其他動詞(例如POST),則有兩種選擇:

  • CORS 觀看following video ,該following video說明了如何在Web API上啟用CORS。 顯然,要使其正常工作,您的客戶端瀏覽器需要tio支持
  • 域上的服務器端網橋。 這里的想法是在托管您的javascript代碼的域上有一些服務器端腳本,該腳本會將HTTP請求發送到API並將響應返回給客戶端。 然后,您將向您自己的域發送常規的AJAX POST請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM