ASP.NET 网站不允许 Axios PUT 访问(405 方法不允许)
ASP.NET Web Site Not Allowing Axios PUT Access (405 Method Not Allowed)
我已经设置了一个控制器并为我所有的 GET
请求工作,但是当涉及到 PUT
请求我的网站时( 不是 Web App,如果这有什么不同的话)正在返回一个 405
.
我已经在我的Global.asax Application_Start()
中定义了其他路线的路线,这是第一个,所以应该首先评估它(如果我的理解是正确的):
void Application_Start(object sender, EventArgs e)
{
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls
| System.Net.SecurityProtocolType.Tls11
| System.Net.SecurityProtocolType.Tls12;
RouteTable.Routes.MapHttpRoute("FilteredSpecialOrders",
routeTemplate: "api/sales/filteredRequests",
defaults: new { controller = "Sales", action = "filteredRequests" });
// subsequent routes are here
}
我的 SalesController
有一个方法,该方法具有请求类型的正确属性 (Put
) 和与我的 routeTemplate
匹配的操作名称,以及 [FromBody]
参数上的属性:
[HttpPut, ActionName("filteredRequests")]
public IHttpActionResult PutSpecialOrders([FromBody] RequestFilter filter)
{
// do the needful
}
...我的客户端代码将消息正文 (filter
) 创建为 JavaScript object
并通过 axios 发送 .put
请求:
getFilteredRequests: async function () {
let filter = {
name: this.name,
age: this.yearsOld,
/* other name/value pairs of course */
};
const response = await axios.put(salesApi + 'filteredRequests', filter);
let data = response.data;
return data;
}
...但我总是得到 405 - Method Not Allowed.
我忘记了什么?我不确定在正文中发送的 JSON 对象是如何序列化到我的 RequestFilter
对象中的——这是自动发生的还是我需要在某个地方定义它?我已确保两端的名称相同,但除此之外...
我编辑了我的 web.config 以删除每个 this post 的 WebDAV 位 - 但我还必须将我的管道从 classic
模式切换到 integrated
才能让它工作。
我已经设置了一个控制器并为我所有的 GET
请求工作,但是当涉及到 PUT
请求我的网站时( 不是 Web App,如果这有什么不同的话)正在返回一个 405
.
我已经在我的Global.asax Application_Start()
中定义了其他路线的路线,这是第一个,所以应该首先评估它(如果我的理解是正确的):
void Application_Start(object sender, EventArgs e)
{
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls
| System.Net.SecurityProtocolType.Tls11
| System.Net.SecurityProtocolType.Tls12;
RouteTable.Routes.MapHttpRoute("FilteredSpecialOrders",
routeTemplate: "api/sales/filteredRequests",
defaults: new { controller = "Sales", action = "filteredRequests" });
// subsequent routes are here
}
我的 SalesController
有一个方法,该方法具有请求类型的正确属性 (Put
) 和与我的 routeTemplate
匹配的操作名称,以及 [FromBody]
参数上的属性:
[HttpPut, ActionName("filteredRequests")]
public IHttpActionResult PutSpecialOrders([FromBody] RequestFilter filter)
{
// do the needful
}
...我的客户端代码将消息正文 (filter
) 创建为 JavaScript object
并通过 axios 发送 .put
请求:
getFilteredRequests: async function () {
let filter = {
name: this.name,
age: this.yearsOld,
/* other name/value pairs of course */
};
const response = await axios.put(salesApi + 'filteredRequests', filter);
let data = response.data;
return data;
}
...但我总是得到 405 - Method Not Allowed.
我忘记了什么?我不确定在正文中发送的 JSON 对象是如何序列化到我的 RequestFilter
对象中的——这是自动发生的还是我需要在某个地方定义它?我已确保两端的名称相同,但除此之外...
我编辑了我的 web.config 以删除每个 this post 的 WebDAV 位 - 但我还必须将我的管道从 classic
模式切换到 integrated
才能让它工作。