我试图通过Postman调用Put方法,但总是得到错误:
“405方法不允许”和“消息”:“要求的资源不支援http方法'PUT'。”
我使用DocumentDB和C#。以下是我的代码:
[Route("multilanguage/Resources/{id}/{Language}")]
[HttpPut]
public async Task<IHttpActionResult> UpdateResource(string Id, string Language, string text)
{
client = new DocumentClient(new Uri(EndPoint), AuthKey);
var collectionLink = UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId);
var query = new SqlQuerySpec("SELECT * FROM MultiLanguage as m where m.id = @pmId",
new SqlParameterCollection(new SqlParameter[] { new SqlParameter { Name = "@pmId", Value = Id } }));
Document doc = client.CreateDocumentQuery<Document>(
collectionLink, query).AsEnumerable().FirstOrDefault();
List<Models.Translations> d = doc.GetPropertyValue<List<Models.Translations>>("Translations");
Models.Translations temp = d.Find(p => p.Language == Language);
temp.Content = text;
temp.LastModified = DateTimeOffset.Now;
temp.ModifiedBy = "admin";
doc.SetPropertyValue("Translations", d);
Document updated = await client.ReplaceDocumentAsync(doc);
return Ok();
}
当我通过Postman调用Put方法时,我调用了“"。2”和“En”是我代码中的前两个参数。我还在Postman请求正文中指定了“text”参数值,其类型为x-www-form-urlencoded:key = text,value = Test!这个put方法应该将临时内容值更新为“Test!"。但是,它总是失败,并出现上面提到的错误。
我错过什么了吗?
2条答案
按热度按时间hs1ihplo1#
405错误当执行一个PUT请求到web api是一个众所周知的主题。你可以在this或this SO问题中找到许多解决方案。
对于控制器的设计:
PUT被设计成有一个主体,就像POST一样,在您的情况下,您应该发送主体中的所有参数。
您应该创建一个包含要发送到服务器的对象的类:
然后指定不带属性routing的route,并从请求正文中获取对象
从客户端,您可以将对象添加到内容类型application/json的PUT请求中,如下所示
在将json添加到http请求时,不要忘记将其字符串化
然后将在“"处到达PUT控制器。
14ifxucb2#
检查您发布数据的URL,在我的情况下,URL是不正确的,因为我得到了这些错误,还验证在正文中,您应该选择原始,并将文本更改为JSON,如果您将JSON作为数据传递。