2016-02-10 32 views
0

'嘗試製作帶有兩個參數的web api控制器:一個模型對象和字符串。ASP.NET Web Api - 多個參數500錯誤

public string AddDevice(Device device, [FromBody] string userName) 
{ 
    // Some operations here    
} 

當嘗試將其與上提琴手一個參數: 對於設備對象(主體請求):

{ 
    "DeviceName":"name, 
    "StolenFlag":false 
} 

對於字符串 「[FromBody]字符串username」(體請求):

"userName" 

它工作正常。我只是不知道如何使這個方法適用於這兩個參數。當我嘗試上的提琴手連接請求體這樣的:

{ 
    "DeviceName":"name, 
    "StolenFlag":false 
} 
"userName" 

我得到一個500錯誤。這意味着,該服務器找到正確的控制器方法,但無法處理請求。有任何想法嗎?

+0

看到這個問題的答案:http://stackoverflow.com/questions/14407458/webapi-multiple-put-post-parameters – Alireza

回答

0

首先將以下行添加到App_Start文件夾中的WebApiConfig.cs。

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

它去這個函數內部:

public static void Register(HttpConfiguration config) 

建立自己的API,並讀取響應完整的錯誤消息。這應該告訴你到底發生了什麼。

由於在Request主體中只能有一個參數,所以可以在URI中更改接受用戶名的方法。

public string AddDevice([FromBody] Device device, string userName) 
    { 
     // Some operations here 
     return "";    
    } 
+0

{ 「消息」: 「發生錯誤」,「ExceptionMessage 「:」不能多個參數(「設備」和「用戶名」)綁定到請求的內容「」 ExceptionType。「:」 System.InvalidOperationException「‘堆棧跟蹤’:」瓦特System.Web.Http.Controllers.HttpActionBinding .ExecuteBindingAsync(HttpActionContext ActionContext中,的CancellationToken的CancellationToken)\ r \ NW System.Web.Http.Controllers.ActionFilterResult。 d__2.MoveNext() – laik

+0

所以像我告訴你,有約束力的兩個參數那裏有問題。我這樣做是正確的?身體的要求是在第一篇文章。 – laik

+0

如果用戶名是一個字符串,你可以把它在URI代替鄰f身體?您只能在正文中使用一個參數 – jsxsl