gpt4 book ai didi

asp.net - 找不到 Http 404

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:45 25 4
gpt4 key购买 nike

我正在开发 ASP.NET Web API。我正在尝试使用 Put http 调用来更新某些资源。

我一直在搜索,有很多可能的配置,但我无法找到适合我的配置。

我按照惯例使用端点。 Controller 上没有路由,只有我要执行的函数的名称。

public IHttpActionResult Put([FromBody]JObject data)
{
return this.ExecuteWithErrorHandling(() =>
{
return Ok();
});
}

问题是,当我从我的网络应用程序调用它时,首先调用了一个 OPTIONS。我收到 405 错误。

所以我发现,如果我从网络配置中删除 OPTIONSVerbHandler 和 ExtensionlessUrlHandler-Integrated-4.0,我可以在选项调用中获得 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>

注意到当我从 postman 那里进行选项调用时,我没有看到 Put 方法。

Postman output

Controller 完整代码:

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();
});
}

}
}

但是问题依旧。不确定我错过了什么。

最佳答案

在查看了几种配置后,这是适合我的配置。

  1. 从 WebApiConfig 中删除了 EnableCors

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 有效吗?

谢谢!

关于asp.net - 找不到 Http 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038331/

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