gpt4 book ai didi

angularjs - 请求的资源不支持 http 方法 'OPTIONS' .?

转载 作者:行者123 更新时间:2023-12-03 15:08:02 25 4
gpt4 key购买 nike

我正在从我的 angular.js 客户端向 asp.net web api PUT 方法发出以下请求:

var org = {
OrgId: 111,
name: 'testing testing'
};
$http.put("http://localhost:54822/api/data/putorganisation/1/", org).then(function(status) {
console.log("success PUT");
return status.data;
});

但是得到以下错误消息(在 fiddler 中):
{"message":"The requested resource does not support http method 'OPTIONS'."}

这是我的 asp.net web api web.config 文件的一部分:
 <system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type,x-xsrf-token,X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<validation validateIntegratedModeConfiguration="false" />
<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" />
<remove name="WebDAV" />
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
</system.webServer>

数据 Controller web api:
public HttpResponseMessage Options()
{
var response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
return response;
}

public HttpResponseMessage PutOrganisation(int id, [FromBody]Organisation org)
{
var opStatus = _Repository.UpdateOrganisation(org);
if (opStatus.Status)
{
return Request.CreateResponse<Organisation>(HttpStatusCode.Accepted, org);
}

return Request.CreateErrorResponse(HttpStatusCode.NotModified, opStatus.ExceptionMessage);
}

这是我的问题:当我在 fiddler(有效)中与在 angularclient(无效)中发出完全相同的请求时,为什么会得到 errormsg(见上文)?

最佳答案

我知道这是一个老问题,但我遇到了同样的问题,并认为我可以帮助其他试图弄清楚的人。
我通过删除 Web.config 中的 2 个处理程序配置解决了这个问题:

<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>
我不知道为什么它解决了这个问题,但我的工作理论是 <remove name="OPTIONSVerbHandler" />默认情况下禁止 OPTIONS 请求。当从浏览器发送请求时,它在 PUT 请求之前首先发送一个 OPTIONS 请求,因此它永远不会到达 PUT 请求,因为第一个 OPTIONS 请求被拒绝为 api 上的无效 http 方法。
在 fiddler 中,我假设它只发送 PUT 请求(我使用 Postman Web 应用程序手动发送请求观察到相同的行为)。所以它跳过禁止的 OPTIONS 请求并成功。

关于angularjs - 请求的资源不支持 http 方法 'OPTIONS' .?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com