簡體   English   中英

通過HTTP調用RESTFUL Web API時出現500 Server錯誤

[英]500 Server Error when calling RESTFUL Web API over HTTP

我的WEB API控制器有以下結構:

public class MyController : ApiController
{
   [System.Web.Http.HttpPost]
   public bool Method1([FromBody] int id, [FromBody] string token, [FromBody] string deviceID, [FromBody] string username)
   {
      bool returnValue = false;

      //do code business logic here

      return returnValue;
   }

   [System.Web.Http.HttpPost]
   public bool Method2([FromBody] int id, [FromBody] string token)
   {
      bool returnValue = false;

      //do code business logic here

      return returnValue;
   }
}

當我試圖使通過HTTP REST風格的網頁API的任何Method1Method2 ,我得到一個500內部服務器錯誤。

如果我從任一方法中刪除輸入參數,我就能夠在沒有錯誤的情況下制作Web API。

我通過.NET測試方法對控制器進行了單元測試,邏輯不會產生異常。

我添加了一個名為Get with without parameters的附加方法,並且能夠使用該服務而沒有任何錯誤。

這是我嘗試使用jQuery在JavaScript中使用Web API的代碼片段:

var uri = "http://127.0.0.1/MyWebApi/api/mycontroller/method2";

var myObject =
{
    id: $('#id').val(),
    token: $('#token').val()
};

$.post(uri, JSON.stringify(myObject)).done(function (data) {
    $('#result').text(data);
})
.fail(function (jqXHR, textStatus, err) {
    $('#result').text('Error: ' + err);
});

是什么導致我在初始API控制器結構上獲得500內部服務器錯誤?

從關於[FromBody]文檔

最多允許一個參數從消息正文中讀取。

因此,您必須創建一個與您作為正文發布的參數匹配的模型。

這500錯誤可能是因為考慮到您正在使用的HTTP方法(POST),它沒有在服務器中為給定參數找到匹配的Action。

myObject不應該是這樣的嗎? (令牌代替toke)

var myObject =
{
    id: $('#id').val(),
    token: $('#token').val()
};

此外,您不需要對JSON對象進行字符串化。 如果應該像這樣工作:

$.post(uri, myObject).done(function (data) {
    $('#result').text(data);
})
.fail(function (jqXHR, textStnatus, err) {
    $('#result').text('Error: ' + err);
});

我遇到了同樣的錯誤,我花了很長時間才弄清楚導致它的原因。 最簡單的方法是從瀏覽器中檢查您的響應消息。 在IE11中,您可以按F12,轉到網絡選項卡並開始錄制。 然后撥打電話后停止並查看電話。 在我的情況下,我發現由於我即將收到的對象中的循環鏈接,我的返回消息無法序列化。 因此,在Web API方面的一些輕微調整中,我設法讓它工作得很好。 請檢查您的回復 - 您可能會獲得有關錯誤的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM