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 对象中的 - 这是自动发生的还是我需要在某个地方定义它?我确保两端的名称相同,但除此之外......

【问题讨论】:

检查您的 IIS web.config,您可能仍然启用了 WebDAV,它会在应用程序代码之前插入自身以处理 PUT 请求。 我在寻找什么? WebDAV 或其他值?因为那里没有关于 WebDAV 的内容。 ***.com/questions/6147181/… 如果您将评论作为答案发表,我会接受。 【参考方案1】:

我编辑了我的 web.config 以删除每个 this post 的 WebDAV 位 - 但我还必须将我的管道从 classic 模式切换到 integrated 以使其工作。

【讨论】:

以上是关于ASP.NET 网站不允许 Axios PUT 访问(不允许 405 方法)的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 处理 PUT/DELETE 动词

ASP.Net mvc5 我的网站不允许'åäö'

API 未在 axios put 中检测 PUT 请求中的模型

ASP.NET iis发布网站后,浏览报错。虚拟路径“/aspx/login.aspx”映射到另一个应用程序,这是不允许的。

asp.net WebAPI 问题 iisnode默认不支持PUT和DELETE的解决

ASP.NET 虚拟路径映射到另一个不允许的应用程序