Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不允许使用GET 405方法_C#_Jquery_Json_Web Services_Asp.net Web Api - Fatal编程技术网

C# 不允许使用GET 405方法

C# 不允许使用GET 405方法,c#,jquery,json,web-services,asp.net-web-api,C#,Jquery,Json,Web Services,Asp.net Web Api,这是我调用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', da

这是我调用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;

        }
    }
使用(var-client=new-HttpClient())
{
client.BaseAddress=新Uri(“http://localhost:55208/");
var请求=新设备AccessRequest
{
RequestId=Guid.NewGuid().ToString(),
DeviceId=“ACU/B2/01/R1”,
AccessType=“解锁”,
LoginId=“测试仪”,
Password=“tester”,
};
var response=client.PostAsJsonAsync(“api/accesspanel”,request).Result;
if(响应。IsSuccessStatusCode)
{
var deviceAccessResponse=response.Content.ReadAsAsync().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;
    }
[HttpPost]
公共HTTPResponseMessagePostDeviceControl(DeviceAccessRequest DeviceAccessRequest)
{
var deviceAccessResponse=新的deviceAccessResponse(deviceAccessRequest.RequestId)
{
Status=“确定”
};
var response=Request.CreateResponse(HttpStatusCode.OK,deviceAccessResponse);
返回响应;
}

您在控制台中看到GET请求的原因是您指定了仅适用于GET请求的
数据类型:“jsonp”
(原因是jQuery将其转换为指向指定url的
标记)。如果您想使用GET以外的其他动词进行跨域AJAX,那么就不能使用JSONP。如果您需要使用其他动词(如案例中的POST),您有2个选项:

  • 。请看下面的示例,其中说明了如何在Web API上启用CORS。显然,要使其正常工作,您的客户端浏览器需要tio支持它
  • 域上的服务器端网桥。这里的想法是在承载javascript代码的域上有一些服务器端脚本,这些脚本将向API发送HTTP请求并将响应返回给客户端。然后,您将向自己的域发送一个常规的AJAX POST请求