Biv*_*aju 7 c# internal-server-error asp.net-mvc-4 asp.net-web-api
当我的 WebAPI 控制器中的返回类型为“字符串”时,我的 MVC 控制器中SuccessStatusCode返回“确定”,但是当返回类型是名为“用户”的模型时,我收到此内部服务器错误。这是我的代码:
网络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;
}
}
Run Code Online (Sandbox Code Playgroud)
调用 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();
}
Run Code Online (Sandbox Code Playgroud)
用户模型:
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; }
}
Run Code Online (Sandbox Code Playgroud)
在我的 WebAPI 中,如果我将返回类型从USERto更改为string(当然,将返回变量类型更改为某个字符串(userInfo.FIRST_NAME)),我会得到SuccessStatusCode“OK”,但是从这段代码开始,我得到Internal Server Error了StatusCode: 500(不管什么意思)。我试过在每个可能的点插入断点,我知道 api 返回的结果很好。我只是不明白为什么下面这行
HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);
Run Code Online (Sandbox Code Playgroud)
当我的返回类型为 USER 时,会出现 InternalServerError 错误,并返回整个 USER 模型而不是一个字符串。
请不要担心我传递给控制器的userName和domain参数,它们工作正常!
通常,当发生这种情况时,意味着无法序列化响应。一旦您的控制器返回 USER 实例,WebAPI 就必须将其序列化为客户端请求的格式。
在本例中,客户端请求“application/json”。默认的JsonMediaTypeFormatter使用 JSON.Net 将 C# 对象转换为客户端的 json。显然序列化步骤失败了,但响应代码没有告诉您确切的原因。
准确了解发生情况的最简单方法是使用自定义 MessageHandler,它会强制主体提前缓冲,以便您可以看到实际的异常。看一下这篇博文的例子,迫使它向您展示真正的失败。
| 归档时间: |
|
| 查看次数: |
16318 次 |
| 最近记录: |