“NetworkError:Ajax 调用中的 405 Method Not Allowed 错误

Posted

技术标签:

【中文标题】“NetworkError:Ajax 调用中的 405 Method Not Allowed 错误【英文标题】:"NetworkError: 405 Method Not Allowed error in Ajax Call 【发布时间】:2015-09-18 12:10:53 【问题描述】:

我创建了一个 RESTservice 并在 Chrome REST Console 上对其进行了测试。它工作正常,我得到了响应,但是在 jquery Ajax 使用相同的内容时,我得到了 "NetworkError: 405 Method Not Allowed error in Ajax CallCross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:64132/Auth. (Reason: CORS request failed). 错误。这是我的 Ajax 代码..

var UserDetails =  "UserName": "Bond", "Password": "password" ;

$.ajax(
    type: 'POST',
    url: 'http://localhost:64132/Auth',
    crossDomain: true,
    data: UserDetails,
    contentType: "application/json; charset=utf-8",
    success: function (data) 

        alert(data.UserName);
    ,
    error: function (XMLHttpRequest, textStatus, errorThrown) 
        alert("some error");
    
);

请帮助我更正此问题并成功调用服务。谢谢..

更新

当我尝试从 Chrome 调用服务时,我在控制台中收到以下错误..

Failed to load resource: the server responded with a status of 405 (Method Not Allowed)
Test.html:1 XMLHttpRequest cannot load http://localhost:64132/Auth. No  'Access-Control-Allow-Origin' header is present on the requested resource.  Origin 'null' is therefore not allowed access. The response had HTTP status code 405.

【问题讨论】:

developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 你在服务器端使用什么 type: 'POST', 试试type: 'GET', 这是一个 CORS 问题,您需要在 Rest 服务中设置 Access-Control-Allow-Origin: http://localhost:64132/ @Lara 那么你不是从 localhost 运行,而是在 file:// 上运行并访问 localhost,因此是 CORS。请参阅下面的答案。 【参考方案1】:

现代浏览器对从不同“域”检索内容有非常严格的规定。从本地文件系统(您的 HTML/脚本)检索内容与向 localhost(您的 ajax 调用)发出网络请求不同,因此 Chrome 将其视为跨域请求。

为了使跨域请求成功,您还需要从http://localhost:64132/ URL 提供 HTML 内容/脚本(因此它们在同一个域中),或者您需要设置您的REST 服务实现 CORS 舞蹈以允许您的 file: URL 访问它。

如果不了解如何实现 REST 服务的详细信息,就不可能针对任一选项给出具体说明。您选择哪一个将取决于您打算如何在现实生活中部署页面和服务(是否相同域)以及实施的难易程度。如果您的 REST 服务部署在某种容器中,它可能会提供用于实现 CORS 和/或用于提供初始页面的选项。

同一问题的随机示例(尽管此处的确切解决方案不太可能适用于您的特定情况):Access-Control-Allow-Origin header when Origin 'null' when trying to post data to a LOCAL application

【讨论】:

以上是关于“NetworkError:Ajax 调用中的 405 Method Not Allowed 错误的主要内容,如果未能解决你的问题,请参考以下文章