【发布时间】:2016-06-13 06:58:21
【问题描述】:
我正在使用 C# 编写一个简单的 WebApi 程序。 (我非常了解 MVC,但我是 WebApi 的新手。)它包含一个供应商控制器 (VendorsController.cs),其中包含一个“getvendor”操作,如下面的代码示例所示:
[RoutePrefix("api/vendors")]
public class VendorsController : ApiController
{
[Route("getvendor"), HttpPost]
public TAPUser GetVendor([FromBody] string username)
{
Int32 userid = -1;
...
路由配置如下:
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional
);
我正在使用 Fiddler 来测试程序。首先,我在没有 [FromBody] 的情况下运行了上面的代码,并使用 Fiddler 发送带有 url 中的用户名的 POST 请求,如下所示: http://localhost:60060/api/vendors/getvendor?username=tapuser
这很好用。 tapuser 作为参数传递给 GetVendor 并且操作返回了预期的结果。
接下来,我添加了 [FromBody] 并将username=tapuser 放入请求正文中。这一次,当我发送请求时,tapuser 没有被传递给操作。 GetVendor() 的参数是 null。我已经尝试过请求正文的变体,例如{ "username": "tapuser" },但它没有帮助。我也尝试过以各种方式更改路线,例如将routeTemplate 更改为"api/{controller}/{action}/{id}"。那也没有帮助。我确定我遗漏了一些非常简单的东西,但我只是没有看到它。
【问题讨论】:
-
您确定在请求标头中将内容类型指定为 application/json 吗?如果仍未解决,您能否分享您的提琴手屏幕截图/代码。
-
旁注:来自 Fiddler 的请求的原始视图作为文本比图像更好
-
POST localhost:60060/api/vendors/getvendor HTTP/1.1 User-Agent: Fiddler Content-Type: application/json Host: localhost:60060 Content-Length: 16 username=tapuser
-
我刚刚发布了原始视图。抱歉,缺少格式。
标签: c# rest asp.net-web-api asp.net-mvc-5