ASP.NET 网站不允许 Axios PUT 访问(不允许 405 方法)
Posted
技术标签:
【中文标题】ASP.NET 网站不允许 Axios PUT 访问(不允许 405 方法)【英文标题】:ASP.NET Web Site Not Allowing Axios PUT Access (405 Method Not Allowed) 【发布时间】:2021-12-07 12:57:05 【问题描述】:我已经设置了一个控制器,可以处理我所有的 GET
请求,但是当涉及到 PUT
请求时,我的网站(不是 Web 应用程序,如果那样的话有任何区别)正在返回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
对象中的 - 这是自动发生的还是我需要在某个地方定义它?我确保两端的名称相同,但除此之外......
【问题讨论】:
检查您的 IISweb.config
,您可能仍然启用了 WebDAV,它会在应用程序代码之前插入自身以处理 PUT
请求。
我在寻找什么? WebDAV
或其他值?因为那里没有关于 WebDAV 的内容。
***.com/questions/6147181/…
如果您将评论作为答案发表,我会接受。
【参考方案1】:
我编辑了我的 web.config 以删除每个 this post 的 WebDAV 位 - 但我还必须将我的管道从 classic
模式切换到 integrated
以使其工作。
【讨论】:
以上是关于ASP.NET 网站不允许 Axios PUT 访问(不允许 405 方法)的主要内容,如果未能解决你的问题,请参考以下文章
API 未在 axios put 中检测 PUT 请求中的模型
ASP.NET iis发布网站后,浏览报错。虚拟路径“/aspx/login.aspx”映射到另一个应用程序,这是不允许的。