当我的WebAPI控制器返回类型为“string”时,
WebAPI:
在我的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”,但根据这段代码,我会收到StatusCode:500
的Internal Server Error
(无论何意)。我已经试图在每个可能的地方插入断点,并且我知道api正在正确返回结果。我只是不明白为什么以下行会发生这种情况。HttpResponseMessage responseMessage = await client.GetAsync(url+GetUserInfoURL);
当我使用USER作为返回类型,且返回整个USER模型而不是一个字符串时,会出现InternalServerError错误。
请不要担心我传递给控制器的userName和domain参数,它们正常工作!
GetUserInfo()
端点(与客户端使用的相同URL)并查看发生了什么。 - bzlm