当我在我的WebAPI控制器中返回'string'类型时,SuccessStatusCode
在我的MVC控制器中返回'OK',但是当返回类型是名为'USER' ,我得到这个内部服务器错误。这里是我的代码:C#Web API - 内部服务器错误500
的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;
}
}
MVC控制器调用的WebAPI:
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
(当然,将返回变量类型更改为som e字符串(userInfo.FIRST_NAME)),我得到SuccessStatusCode
'OK',但是从这个代码中,我得到Internal Server Error
和StatusCode: 500
(无论这意味着什么)。我试图在每个可能的点上插入断点,并且我知道api返回结果正常。我只是不明白为什么以下行
HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);
给InternalServerError错误,当我有用户的返回类型,并返回整个用户模型而不是一个字符串。
请不要担心userName
和domain
参数,我传递给控制器,他们工作正常!
“我知道API是返回结果罚款” - 不,它不是。它崩溃了,很可能来自未处理的异常。 :)将返回类型更改回到'USER'并向我们展示向API发送请求的Fiddler输入+输出。然后在'GetUserInfo()'的开头设置一个断点,看看它是否确实退出那个方法*而没有异常。 – bzlm
@bzlm当我在api控制器的'return userInfo'行中添加一个断点时,我得到了所需的结果,而且我知道它,因为它显示在Visual Studio的Autos窗口中。 userInfo变量包含该用户的所有信息。 –
是的,它无一例外地退出。它回到MVC控制器,然后给出例外。 –