gpt4 book ai didi

c# - WebApi 请求 GET 和 POST 上不允许使用 405 方法 - 在 Visual Studio 中工作

转载 作者:行者123 更新时间:2023-11-30 12:41:29 24 4
gpt4 key购买 nike

我们正处于将项目部署到客户测试服务器的阶段,但不幸的是,每次我们的应用程序尝试调用我们提供的任何 Web Api 方法时,我们都会收到 405 错误。

我的 WebApi 调用定义如下:

public class TourController : ApiController
{
[HttpPost]
public JsonCollection RequestTours([FromBody] DateRequest request){
// Implementation goes here
}

[HttpPost]
public GroupTour RequestTour([FromBody] int request){
// Implementation goes here
}
}

我的WebApi路由如下:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

这些调用在通过 Visual Studio 在本地运行时按定义工作,没有任何修改,但是,当我们将它们放在客户端的 IIS 测试服务器上时,我们在通过 AJAX(主要方法)或通过 URL 调用方法时始终收到 405 错误。

正如其他帖子中所建议的,我们已尝试在 system.webServer 中定义以下内容:

<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<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>

我们还尝试添加以下内容但无济于事:

<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/> <!-- add this -->
</modules>

<handlers>
<remove name="WebDAV" />
...
</handlers>

我们目前不知所措,因为我们已经尝试了关于同一主题的类似 Stack Overflow 帖子中提供的大部分建议。非常感谢有关此问题的任何帮助或建议!

注意

仅作记录,我通过 Javascript/JQuery 的调用方法执行以下操作:

function populateInstances(date) {
var $container = $('#id-tour_4');
$.ajax({
url: '/api/tour/requesttours',
type: 'POST',
data: { Date: date },
dataType: 'json',
success: function (data) {
var htmlstring = '';
$container.empty();
if (data.Results.length > 0) {
for (var i = 0; i < data.Results.length; i++) {
htmlstring += '<div class="book-title">' + data.Results[i].Name + '</div>';
htmlstring += '<div class="tour_select_list_div">';
htmlstring += '<ul class="tour_select_list">';
for (var j = 0; j < data.Results[i].Instances.length; j++) {
htmlstring += '<li><label for="id-tour_4_' + j + '"><input id="id-tour_4_' + j + '" type="radio" value="' + data.Results[i].Instances[j].TourId + '" name="BookTour.Instance" data-availability="' + data.Results[i].Instances[j].Availability + '" data-adultprice="' + data.Results[i].Instances[j].AdultPrice + '" data-childprice="' + data.Results[i].Instances[j].ChildPrice + '">';
htmlstring += data.Results[i].Instances[j].StartTime + ' - ' + data.Results[i].Instances[j].Title + '</label></li>';
}
htmlstring += '</ul>';
htmlstring += '</div>';
}
} else {
htmlstring += 'There are no tours departing on this date';
}
$container.append(htmlstring);
}
});
}

最佳答案

据此,找到几个可能有助于解决生产问题的选项

检查 list :

  1. 尝试添加一个[Route]属性
 [HttpPost]
[Route("api/tour/requesttours")]
public JsonCollection RequestTours([FromBody] DateRequest request)
   You can try removing `[HttpPost]` when applying the `[Route]` attribute
  1. 确保CORS已启用

  2. 检查您使用的是 System.Web.HttpHttpPost 而不是等效的 Mvc 命名空间。

关于c# - WebApi 请求 GET 和 POST 上不允许使用 405 方法 - 在 Visual Studio 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271215/

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