C# 使用Web API 2的一对一关系
我正在尝试使用WebAPI 2Get方法填充数据网格。我有一个User类和一个UserAddresscals,它们之间有一对一的关系,它们的代码如下:C# 使用Web API 2的一对一关系,c#,asp.net-web-api2,C#,Asp.net Web Api2,我正在尝试使用WebAPI 2Get方法填充数据网格。我有一个User类和一个UserAddresscals,它们之间有一对一的关系,它们的代码如下: public partial class User { public int UserId { get; set; } public string UserName { get; set; } public string UserType { get; set; } public virtual UserAddr
public partial class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string UserType { get; set; }
public virtual UserAddress UserAddress { get; set; }
}
public partial class UserAddress
{
public int UserId { get; set; }
public string UserAddress1 { get; set; }
public virtual User User { get; set; }
}
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//HTTP Get
HttpResponseMessage response = await client.GetAsync("api/Users");
if (response.IsSuccessStatusCode)
{
var users = response.Content.ReadAsAsync<IEnumerable<User>>().Result;
grdList.ItemsSource = users;
}
else
{
MessageBox.Show(response.ReasonPhrase);
}
}
// GET: api/Users
public IQueryable<User> GetUsers()
{
return db.Users;
}
我客户端的代码如下所示:
public partial class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string UserType { get; set; }
public virtual UserAddress UserAddress { get; set; }
}
public partial class UserAddress
{
public int UserId { get; set; }
public string UserAddress1 { get; set; }
public virtual User User { get; set; }
}
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//HTTP Get
HttpResponseMessage response = await client.GetAsync("api/Users");
if (response.IsSuccessStatusCode)
{
var users = response.Content.ReadAsAsync<IEnumerable<User>>().Result;
grdList.ItemsSource = users;
}
else
{
MessageBox.Show(response.ReasonPhrase);
}
}
// GET: api/Users
public IQueryable<User> GetUsers()
{
return db.Users;
}
使用(var-client=new-HttpClient())
{
client.BaseAddress=新Uri(BaseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
//HTTP获取
HttpResponseMessage response=wait client.GetAsync(“api/Users”);
if(响应。IsSuccessStatusCode)
{
var users=response.Content.ReadAsAsync().Result;
grdList.ItemsSource=用户;
}
其他的
{
MessageBox.Show(response.ReasonPhrase);
}
}
控制器类的代码如下所示:
public partial class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string UserType { get; set; }
public virtual UserAddress UserAddress { get; set; }
}
public partial class UserAddress
{
public int UserId { get; set; }
public string UserAddress1 { get; set; }
public virtual User User { get; set; }
}
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//HTTP Get
HttpResponseMessage response = await client.GetAsync("api/Users");
if (response.IsSuccessStatusCode)
{
var users = response.Content.ReadAsAsync<IEnumerable<User>>().Result;
grdList.ItemsSource = users;
}
else
{
MessageBox.Show(response.ReasonPhrase);
}
}
// GET: api/Users
public IQueryable<User> GetUsers()
{
return db.Users;
}
//GET:api/Users
公共IQueryable GetUsers()
{
返回db.Users;
}
我能够检索没有任何关系的数据,但是使用一对一关系,我无法这样做,我不知道问题出在哪里。如果返回Json,可能是循环引用问题。请参阅以下链接中的部分 特别是与处理循环对象引用和配置JsonMediaTypeFormatter相关的部分 var json=GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling=Newtonsoft.json.PreserveReferencesHandling.All 我想知道的另一个部分是,您是否需要使用linq执行急切加载以返回地址
return db.users.Include(p=>p.address)您的意思是在您的客户端代码中,您的User.UserAddress为null吗?其中没有值。我是使用post方法输入值的。我个人不理解您的问题。我想使用get方法检索数据,但我得到了错误。甚至不要尝试向我指出错误或异常消息!没有你的提示我什么都知道!