You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ASP.NET Core MVC向ASP.NET Core Web API发送PUT请求

问题原因与解决方案

核心错误原因

出现405 Method Not Allowed且请求未命中控制器,是以下3个配置不匹配导致的:

  1. 路由规则不匹配:你的PUT接口定义了路由api/[controller]/{customer},要求URL最后必须携带名为customer的路由参数,但你调用时请求地址为api/Customer/,没有对应路由参数,路由匹配失败自然找不到对应的PUT接口。
  2. 参数绑定规则错误:接口的Customer复杂类型参数没有指定来源,ASP.NET Core默认不会主动从JSON请求体绑定复杂类型参数,导致即使路由匹配,请求也无法被正确解析。
  3. 路由设计冗余:你是将整个Customer对象放在请求体中提交,不需要在路由里配置{customer}参数,该配置属于多余规则。

修复步骤

1. 修正API端接口配置

修改PUT接口的特性如下:

[HttpPut]
[Route("api/[controller]")] // 路由和你调用时的地址对齐,也可以自定义如api/[controller]/Edit
public IActionResult EditCustomer([FromBody] Customer customer) // 加[FromBody]指定从请求体绑定参数
{
    var cust = _customerData.EditCustomer(customer);
    if (cust == string.Empty)
    {
        return Ok();
    }
    else
    {
        return new StatusCodeResult(StatusCodes.Status500InternalServerError);
    }
}

2. 确认调用端请求地址匹配

你当前调用的地址api/Customer/和上面修正后的路由已经匹配,如果修改了路由规则,要同步调整PutAsJsonAsync的第一个参数,确保两端路由完全一致。

其他潜在问题修复

你贴出的Customer模型类中没有定义Name属性,但在EditCustomer数据操作方法中用到了pro.Name = customer.Name,会触发空引用异常,需要在Customer类中补充Name属性:

public class Customer
{
    [Required]
    public Guid CustomerId { get; set; }
    public int Age { get; set; }
    public int Phone { get; set; }
    public string Name { get; set; } // 补充缺失的Name属性
}

可选排查项

如果完成上面修改后还是报405,可以检查两个常见配置:

  • 检查CORS配置:如果是跨域请求,要确保CORS规则允许PUT方法的访问。
  • 检查IIS WebDAV配置:IIS默认启用的WebDAV模块会拦截PUT/DELETE请求,可以在web.config中禁用该模块解决拦截问题。

内容的提问来源于stack exchange,提问作者Psychonaut007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:06:03