繁体   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