自从一周以来,我一直在努力解决CORS问题。我正在使用web api2编写Web服务。我创建了一个控制器(用于基本的crud操作)并托管在服务器192.168.0.213:8041/api/user_creation中,我创建了另一个mvc5应用程序并托管在与http://192.168.0.213:8040/usercreation/Index相同的服务器中。我使用以下链接启用了cors。
http://www.c-sharpcorner.com/UploadFile/009ee3/implementation-of-cross-origin-request-in-Asp-Net-web-api-2/
我正在使用angularjs来获取服务,如下所示。我能够从服务器获取数据,并且我能够将数据推送到服务器。所以我的GET和POST动词工作正常。每当我尝试更新和删除时,我都会遇到问题并收到以下错误消息。
Failed to load resource: the server responded with a status of 405 (Method Not Allowed) http://192.168.0.213:8041/User_Creation/1020
XMLHttpRequest cannot load http://192.168.0.213:8041/User_Creation/1020. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.0.213:8040' is therefore not allowed access. The response had HTTP status code 405.
我正在使用angularjs来调用Web服务,如下所示。 例如,更新,
this.update = function (sub) {
var url = 'http://192.168.0.213:8041/User_Creation/' + sub.user_id;
return $http({
method: 'put',
data: JSON.stringify(sub),
url: url,
contentType: "application/json"
});
}
删除,
this.deleteSubscriber = function (user_id) {
var url = 'http://192.168.0.213:8041/User_Creation/' + user_id;
return $http.delete(url).then(function (response) {
return response.data;
});
}
从Web Api我以json的形式接收数据,所以我在global.asx中添加了以下代码。 GlobalConfigGlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters
.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
这是我在web.config中的处理程序代码
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
以下是请求和响应数据。
Request URL: http://192.168.0.213:8041/User_Creation/1021
Request Method: DELETE
Status Code: 405 / Method Not Allowed
- Request Headers
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 0
Host: 192.168.0.213:8041
Referer: http://192.168.0.213:8040/usercreation/Index
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
- Response Headers
Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Mon, 16 Jan 2017 08:34:30 GMT
Server: Microsoft-IIS/8.5
X-Powered-By: ASP.NET
我遇到了PUT和Delete方法的问题。我能得到一些帮助吗?谁能告诉我我做错了什么?谢谢。
答案 0 :(得分:2)
您的网络服务器上不允许使用PUT
和DELETE
动词,而您遇到的问题根本与CORS无关。您可能需要签出几件事以确保首先允许这些动词。在尝试进行跨域AJAX调用之前,请确保您可以对Web API进行标准HTTP调用,并且它会响应这些动词。
所以在你的web.config中你可能有这样的东西:
add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
请注意此处缺少PUT
和DELETE
动词。
还要确保已从web.config中删除了所有WebDAV
和WebDAVModule
跟踪,因为这可能会干扰您的请求:
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
现在您可以使用Postman或Fiddler使用PUT和DELETE谓词成功调用Web API端点,您可以回到javascript尝试。