C# 使用Web API 2的一对一关系

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

我正在尝试使用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 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方法检索数据,但我得到了错误。甚至不要尝试向我指出错误或异常消息!没有你的提示我什么都知道!