加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#Web API – 内部服务器错误500

发布时间:2020-12-15 21:00:39 所属栏目:百科 来源:网络整理
导读:当我在WebAPI控制器中有一个返回类型’string’时,SuccessStatusCode在我的MVC控制器中返回’OK’,但是当返回类型是名为’USER’的模型时,我得到这个内部服务器错误.这是我的代码: 的WebAPI: public class UserController : ApiController{ OnlineCenterEn
当我在WebAPI控制器中有一个返回类型’string’时,SuccessStatusCode在我的MVC控制器中返回’OK’,但是当返回类型是名为’USER’的模型时,我得到这个内部服务器错误.这是我的代码:

的WebAPI:

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();
    }

USER型号:

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更改为字符串(当然,将返回变量类型更改为某个字符串(userInfo.FIRST_NAME)),我将SuccessStatusCode设置为“OK”,但是从此代码开始,我使用StatusCode获取内部服务器错误:500(无论这意味着什么).我已经尝试在每个可能的点插入断点,我知道api返回结果很好.我根本就不明白为什么以下这一行

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

当我有返回类型USER时,给出InternalServerError错误,并返回整个USER模型而不是只返回一个字符串.

请不要担心我传递给控制器??的userName和domain参数,它们工作正常!

解决方法

通常情况下,这意味着它无法序列化响应.一旦您的控制器返回USER实例,WebAPI必须将其序列化为客户端请求的格式.

在这种情况下,客户端请求“application / json”.默认的JsonMediaTypeFormatter使用JSON.Net将您的C#对象转换为客户端的json.显然序列化步骤失败了,但响应代码并没有告诉你究竟原因.

查看确切情况的最简单方法是使用自定义MessageHandler强制主体先缓冲,以便您可以看到实际的异常.以this blog post为例,强制它向您展示真正的失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读