【发布时间】:2016-07-06 19:17:43
【问题描述】:
当我的 WebAPI 控制器中的返回类型为“字符串”时,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();
}
用户模型:
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 ',但在这段代码中,我得到了Internal Server Error 和StatusCode: 500(无论这意味着什么)。我已经尝试在每个可能的点插入断点,并且我知道 api 可以正常返回结果。我只是不明白为什么下面一行
HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);
当我有 USER 的返回类型时给出 InternalServerError 错误,并返回整个 USER 模型而不是一个字符串。
请不要担心我传递给控制器的userName 和domain 参数,它们工作正常!
【问题讨论】:
-
“我知道 api 返回的结果很好”——不,不是。它正在崩溃,很可能来自未处理的异常。 :) 将返回类型更改回
USER并向我们展示 Fiddler 输入+输出以请求 API。然后在GetUserInfo()的开头设置一个断点,看看它是否真的退出了那个方法没有异常。 -
@bzlm 当我在 api 控制器 `return userInfo' 行中添加断点时,我得到了所需的结果,我知道它,因为它显示在 Visual Studio 的 Autos Windows 中。 userInfo 变量包含该用户的所有信息。
-
是的,它无异常退出。它返回到 MVC 控制器,然后给出异常。
-
那么是 MVC 客户端还是 API 服务器崩溃了?如果是客户端,那么您反序列化为 JSON 的尝试可能失败了?再次,展示小提琴。 stackoverflow.com/a/24677189/7724
-
是的,我在尝试反序列化时也遇到了错误,但在我到达那条线之前,我得到了
SuccessStatusCode:Internal Server Error而不是Ok。
标签: c# asp.net-mvc-4 asp.net-web-api internal-server-error