簡體   English   中英

C# Web API - 內部服務器錯誤 500

[英]C# Web API - Internal Server Error 500

當我在我的WebAPI控制器中,有“串”的返回類型SuccessStatusCode返回“OK”在我的MVC控制器,但是當返回類型為一個名為“用戶”的模式,我得到這個內部服務器錯誤。 這是我的代碼:

網絡API:

public class UserController : ApiController
{
    OnlineCenterEntities db = new OnlineCenterEntities();

    public USER GetUserInfo(string userName, string domain)
    {
        USER userInfo = (from u in db.USERs
                         where u.USER_NAME.ToUpper() == userName.ToUpper() && u.LDAP_NAME.ToUpper() == domain.ToUpper()
                         select u).FirstOrDefault();

        return userInfo;
    }
}

調用 WebAPI 的 MVC 控制器:

 public class HomeController : Controller
{
    HttpClient client;
    string url = "http://localhost:61566/api/user/";

    public HomeController()
    {
        client = new HttpClient();
        client.BaseAddress = new Uri(url);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    }

    public async Task<ActionResult> Index(string userName, string domain)
    {
        string GetUserInfoURL = String.Format("GetUserInfo?userName={0}&domain={1}", userName, domain);
        HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);

        if (responseMessage.IsSuccessStatusCode)
        {
            var responseData = responseMessage.Content.ReadAsStringAsync().Result;
            var userInfor = JsonConvert.DeserializeObject<USER>(responseData);
        }

        return View();
    }

用戶模型:

public partial class USER
{

    public int USER_ID { get; set; }
    public string USER_NAME { get; set; }
    public string FIRST_NAME { get; set; }
    public string LAST_NAME { get; set; }
    public string LDAP_NAME { get; set; }
    public string EMAIL { get; set; }
}

在我的 WebAPI 中,如果我將返回類型從USER更改為string (當然,將返回變量類型更改為某個字符串(userInfo.FIRST_NAME)),我會得到SuccessStatusCode為“OK”,但從這段代碼開始,我使用StatusCode: 500獲取Internal Server Error (無論這意味着什么)。 我試過在每個可能的點插入斷點,我知道 api 返回的結果很好。 我只是不明白為什么下面這行

HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);

當我的返回類型為 USER 時,會出現 InternalServerError 錯誤,並返回整個 USER 模型而不是一個字符串。

請不要擔心我傳遞給控制器​​的userNamedomain參數,它們工作正常!

通常,當發生這種情況時,這意味着它無法序列化響應。 一旦您的控制器返回一個 USER 實例,WebAPI 就必須將其序列化為客戶端請求的格式。

在這種情況下,客戶端請求“application/json”。 默認的JsonMediaTypeFormatter使用 JSON.Net 將您的 C# 對象轉換為客戶端的 json。 顯然,序列化步驟失敗了,但響應代碼並沒有告訴你確切的原因。

准確查看正在發生的事情的最簡單方法是使用自定義 MessageHandler 強制主體提前緩沖,以便您可以看到實際的異常。 看看這個博客文章的例子,迫使它向你展示真正的失敗。

暫無
暫無

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

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