web api get正在工作,但发布和删除在iis中发布后不工作

web api get正在工作,但发布和删除在iis中发布后不工作,iis,asp.net-web-api,Iis,Asp.net Web Api,我已经挣扎了4个小时,仍然没有找到任何解决办法。我已经应用了一些修改,但我的post和delete api仍然返回错误500 获取js $.getJSON(API_URL + 'api/claim/search', params).done(function (data) { myJsonObject = data; d.resolve(data); }); return d.promise(); 原料药 原料药 这是我的WebApi.Config.cs public stat

我已经挣扎了4个小时,仍然没有找到任何解决办法。我已经应用了一些修改,但我的post和delete api仍然返回错误500

获取js

$.getJSON(API_URL + 'api/claim/search', params).done(function (data) {
    myJsonObject = data;
    d.resolve(data);
});
return d.promise();
原料药

原料药

这是我的WebApi.Config.cs

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

}
我已经在我的配置中应用了这个Web服务器

<modules>
  <remove name="WebDAVModule" />
  <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v16.2, Version=16.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

我有一个类似的问题,它与捕获请求的函数名有关。出于某种原因,GET函数会自动执行此操作,但POST并不总是这样做。您可以尝试这样显式命名它,看看它是否也解决了您的问题:

[Route("api/claim/savepatient")]
[System.Web.Http.AcceptVerbs("POST")]
[System.Web.Http.HttpPost, ActionName("SavePatient")]
public Guid SavePatient([FromBody]ClaimInfo claimInfo)
{
    //my code
}
请注意,我将
[System.Web.Http.HttpPost]
更改为
[System.Web.Http.HttpPost,ActionName(“SavePatient”)]

您将操作命名为“SavePatient”,而不是Post。路由器将/api/{controller}与{controller}控制器类匹配。HTTP方法必须与类的公共方法匹配。尝试将“SavePatient”重命名为“Post”(如果使用该方法,则为“Put”)

并删除url上的额外路径:

url: API_URL + "api/claim/"

如果在可疑动作中放置断点,是否命中?错误是在执行操作之前还是之后发生的?您找到解决方案了吗?
<modules>
  <remove name="WebDAVModule" />
  <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v16.2, Version=16.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>
[Route("api/claim/savepatient")]
[System.Web.Http.AcceptVerbs("POST")]
[System.Web.Http.HttpPost, ActionName("SavePatient")]
public Guid SavePatient([FromBody]ClaimInfo claimInfo)
{
    //my code
}
public class ClaimController : ApiBaseController
{
//[Route("api/claim/")] don't need this
public Guid Post([FromBody]ClaimInfo claimInfo)
{
    //my code to add new claiminfo
}
//[Route("api/claim/")] don't need this
public Guid Put([FromBody]ClaimInfo claimInfo)
{
    //my code to edit claiminfo
}
url: API_URL + "api/claim/"