使用REST API更新Magento 2.1库存报错:Request does not match any route
问题:Magento 2.1 REST API 更新库存时返回 "Request does not match any route" 错误
我尝试用VB.NET代码调用Magento 2.1的REST API更新商品库存数量,但一直收到JSON错误响应:
{"message": "Request does not match any route."}
我的VB.NET代码如下:
Dim Access_Token = "XXXXXXXXXXXXX" Try Dim VATWebClient = New WebClient() VATWebClient.Headers(HttpRequestHeader.Accept) = "application/json" VATWebClient.Headers(HttpRequestHeader.ContentType) = "application/json" VATWebClient.Headers(HttpRequestHeader.Authorization) = "Authorization Bearer " & Access_Token Dim Response As String Response = VATWebClient.UploadString("http://www.xxxxxx.com/rest/V1/products/xxxx/stockItems/1", "{""stockItem"":{""qty"":100}}") Catch webEx As WebException Dim errorMessage As String = webEx.Message Dim errorStack As String = webEx.StackTrace End Try
我还用SoapUI测试了这个调用,结果还是一样的错误。之前看到资料说需要更新webapi.xml配置这个API,但我联系不上主机/网站开发者,希望找到不需要修改配置的解决办法。
解决方案
我帮你排查几个关键问题,不需要修改webapi.xml大概率就能解决:
修正请求方法
Magento 2更新库存的REST API要求使用PUT方法,但你的UploadString调用默认用的是POST,这是最核心的问题!你需要明确指定请求方法为PUT:Response = VATWebClient.UploadString("http://www.xxxxxx.com/rest/V1/products/xxxx/stockItems/1", "PUT", "{""stockItem"":{""qty"":100}}")修复Authorization Header格式
你写的Header多了冗余的"Authorization"字样,正确格式应该是Bearer {token},修改这行代码:VATWebClient.Headers(HttpRequestHeader.Authorization) = "Bearer " & Access_Token确认商品SKU与库存ID正确性
把URL里的xxxx替换为实际存在的商品SKU,同时确认库存项ID是1(Magento默认库存ID通常是1,多仓库配置的话需要核对后台的库存ID)。验证路由可用性
如果前面的修改还是不行,你可以先用GET请求测试路由是否存在:Response = VATWebClient.DownloadString("http://www.xxxxxx.com/rest/V1/products/你的实际SKU/stockItems/1")如果GET也报错,可能是你的站点REST路径有特殊配置(比如部分站点会用
rest/default带store code的路径),或者Magento安装本身缺失了默认路由——不过这种情况比较少见。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

