【发布时间】:2014-05-20 14:54:57
【问题描述】:
我正在尝试使用 Microsoft 的 Web API 调用端点。我在尝试发布一个简单的字符串值时遇到了问题。这是 API 控制器方法。
[HttpPost]
[Route("search")]
public HttpResponseMessage Search([FromBody] string searchTerm)
{
// Code ommited for brevity.
}
问题是 searchTerm 变量是空的。这是 Fiddler 的 POST 原始视图:
POST http://localhost:51889/search HTTP/1.1
Host: http://localhost:51889
Connection: keep-alive
Content-Length: 15
Cache-Control: no-cache
Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36
Postman-Token: 4fc51a0c-48ca-a1cd-3df8-70155c3cb5fc
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
searchTerm=dogs
我正在使用 Postman 发送请求。 This StackOverflow user had a similar problem,答案之一是阅读Rick Strahl's blog post on the topic。 Rick 提到我需要包含我确实包含的 [FromBody] 属性。但是,这并不能解决问题。我唯一能做的就是像这样创建一个新类
[HttpPost]
[Route("search")]
public HttpResponseMessage Search([FromBody] Search term)
{
// Code ommited for brevity.
}
public class Search
{
public string Term { get; set; }
}
我宁愿不用像这样的简单类型为每个 POST 创建新类。我错过了什么吗?我需要进行哪些更改才能让简单类型与我的帖子一起使用,而无需创建新类?
【问题讨论】:
-
尝试删除
[FormBody]并在url上传递搜索词:search?searchTerm=mySearch
标签: c# asp.net asp.net-mvc asp.net-web-api