Tim*_*Tim 9 c# rest asp.net-web-api asp.net-mvc-5
我正在编写一个简单的WebApi程序,使用C#.(我非常了解MVC,但我是WebApi的新手.)它包含一个Vendors控制器(VendorsController.cs),它包含一个"getvendor"动作,如下面的代码示例所示:
[RoutePrefix("api/vendors")]
public class VendorsController : ApiController
{
[Route("getvendor"), HttpPost]
public TAPUser GetVendor([FromBody] string username)
{
Int32 userid = -1;
...
Run Code Online (Sandbox Code Playgroud)
路由配置如下:
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional
);
Run Code Online (Sandbox Code Playgroud)
我正在使用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}".这也没有帮助.我确定我错过了很简单的东西,但我只是没有看到它.