[英]Put Http 404 not found
我正在使用ASP.NET Web API。 我正在尝试使用Put http调用来更新一些资源。
我一直在搜索,并且有很多可能的配置,但是我找不到适合我的配置。
我按照约定使用端点。 控制器上没有路由,只有我要执行的功能的名称。
public IHttpActionResult Put([FromBody]JObject data)
{
return this.ExecuteWithErrorHandling(() =>
{
return Ok();
});
}
问题是,当我从Web应用程序调用此函数时,首先要调用OPTIONS。 我收到405错误。
因此,我发现,如果从Web配置中删除OPTIONSVerbHandler和ExtensionlessUrlHandler-Integrated-4.0,我可以在options调用中得到200。
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" /> <-- Remove this line -->
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> <-- Remove this line -->
</handlers>
但是问题是在此之后,当我在api上调用Put函数时,我得到了404。
我正在使用IIS Express。 因此,我转到了IIS的配置文件,并在处理程序部分添加了缺少的动词。
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
还要在Web配置上添加值以删除WebDAV
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
和
<handlers>
<remove name="WebDAV" />
<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>
注意,当我从邮递员进行选择呼叫时,没有看到Put方法。
控制器完整代码:
using Newtonsoft.Json.Linq;
using Rev.API.Controllers.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace Rev.API.Controllers
{
public class TestController : BaseApiController
{
public IHttpActionResult Get()
{
return this.ExecuteWithErrorHandling(() =>
{
int[] arr1 = new int[] { 3, 4, 5 }
return Ok(arr1);
});
}
public IHttpActionResult Get(string id)
{
return this.ExecuteWithErrorHandling(() =>
{
int Id = Convert.ToInt32(id);
return Ok(Id);
});
}
[System.Web.Http.HttpPut]
public IHttpActionResult Put([FromBody]JObject data)
{
return this.ExecuteWithErrorHandling(() =>
{
return Ok();
});
}
}
}
但是问题仍然在发生。 不知道我在想什么。
在查看了几种配置后,这是对我有用的配置。
2.在我的网络配置中,这是我的system.web服务器部分:
` <system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false"/>
<handlers>
<remove name="ExtensionlessUrl-Integrated-4.0" />
<add name="ExtensionlessUrl-Integrated-4.0"
path="*."
verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>`
谁知道为什么添加ExtensionlessUrl-Integrated-4.0可以工作?
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.