Когда у меня есть тип возврата «строка» в моем контроллере WebAPI, SuccessStatusCode
возвращает «ОК» в моем MVC-контроллере, но когда тип возврата имеет модель с именем 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();
}
модель 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
до string
(и, конечно, измените тип возвращаемой переменной на сом e string (userInfo.FIRST_NAME)), я получаю SuccessStatusCode
как «ОК», но с этого кода я получаю Internal Server Error
с StatusCode: 500
(что бы это ни значило). Я попытался вставить точку останова во все возможные моменты, и я знаю, что api возвращает результат. Я просто не понимаю, почему следующая строка
HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);
дает ошибку InternalServerError, когда у меня есть тип возвращаемого USER, и вернуть всю пользовательскую модель, а не только одну строку.
Не беспокойтесь о параметрах userName
и domain
, которые я передаю контроллерам, они работают нормально!
«Я знаю, что api возвращает результат в порядке» - нет, это не так. Это сбой, скорее всего, из необработанного исключения. :) Измените возвращаемый тип на 'USER' и покажите нам вход Fiddler + вывод для запроса API. Затем установите точку останова в начале 'GetUserInfo()' и посмотрите, действительно ли он выходит из этого метода * без * исключения. – bzlm
@bzlm, когда я добавляю точку прерывания в строке 'return userInfo 'контроллера api, я получаю требуемый результат, и я знаю его, потому что он отображается в Autos Windows в Visual Studio. В переменной userInfo содержится вся информация об этом пользователе. –
Да, он выходит без исключения. Он возвращается к контроллеру MVC, а затем дает исключение. –