我正在使用C#編寫簡單的WebApi程序。 (我知道MVC還算不錯,但我是新來的WebAPI。)它包含供應商控制器(VendorsController.cs),其中包含如下面的代碼樣本中的「getvendor」行動:使用Fiddler向WebApi發送POST請求
[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]上面的代碼,並使用提琴手在這樣的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}」。這也沒有幫助。我確信我錯過了一些非常簡單的事情,但我只是沒有看到它。
您是否確定在請求標頭中將content-type指定爲application/json?如果仍然沒有解決,你能分享你的提琴手屏幕截圖/代碼嗎? –
備註:來自Fiddler的原始請求視爲文本會比圖片更好 –
POST http:// localhost:60060/api/vendors/getvendor HTTP/1.1 User-Agent:Fiddler Content-Type:application/json 主機:localhost:60060 內容長度:16 username = tapuser – Tim