C# Web Api什么是默认的模型绑定器,我在哪里引用它们
我刚刚开始学习Web Api,在完成了一些教程和小的测试项目后,我觉得有足够的信心构建一个“真实世界”的应用程序 在我第一次创建解决方案时,我删除了我认为不必要的所有内容。在这个练习中,我必须删除一些活页夹,因为当我发布/放置一个复杂对象时,它总是空的 简而言之,我的问题是在web api中,什么是默认的模型绑定器,我在哪里引用它们?下面我详细介绍了我正在尝试做的事情以及我试图解决这个问题的方法 我想做的事 我有两个正在运行的解决方案,每个解决方案中都有相同的类。我正在尝试将一个复杂对象从解决方案a传递到解决方案B。当我到达解决方案B中的断点时,传递的值始终为空(解决方案B是我的“真实世界”项目,存在问题) 我尝试过的 在阅读了几个stackoverflow线程之后,我尝试在同一个解决方案中调用一个操作并传递同一个对象,它成功了!比如说C# Web Api什么是默认的模型绑定器,我在哪里引用它们,c#,asp.net-web-api,C#,Asp.net Web Api,我刚刚开始学习Web Api,在完成了一些教程和小的测试项目后,我觉得有足够的信心构建一个“真实世界”的应用程序 在我第一次创建解决方案时,我删除了我认为不必要的所有内容。在这个练习中,我必须删除一些活页夹,因为当我发布/放置一个复杂对象时,它总是空的 简而言之,我的问题是在web api中,什么是默认的模型绑定器,我在哪里引用它们?下面我详细介绍了我正在尝试做的事情以及我试图解决这个问题的方法 我想做的事 我有两个正在运行的解决方案,每个解决方案中都有相同的类。我正在尝试将一个复杂对象从解决方
- 将对象从solutionA.method1传递到solutionA.controller1.action1
- 将对象从solutionB.method1传递到solutionB.controller1.action1失败(500-内部服务器错误)
public const string uri = "http://localhost:49611/api/Values";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responce = await httpClient.PutAsJsonAsync<AddUpdatePropertyForm>(uri, propertyForm);
...more stuff...
}
}
public void Put([FromBody]AddUpdatePropertyForm form)
{
...Has all passed values but IN THE SAME SOLUTION...
}
public const string uri = "http://localhost:58814/api/sample";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responce = await httpClient.PutAsJsonAsync<AddUpdatePropertyForm>(uri, propertyForm);
...more stuff...
}
}
public const string uri = "http://localhost:58814/api/sample";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new JavaScriptSerializer().Serialize(propertyForm);
var response = await httpClient.PutAsJsonAsync<string>(uri, content);
...more stuff...
}
}
使用解决方案a和解决方案b不起作用的代码
解决方案A
public const string uri = "http://localhost:49611/api/Values";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responce = await httpClient.PutAsJsonAsync<AddUpdatePropertyForm>(uri, propertyForm);
...more stuff...
}
}
public void Put([FromBody]AddUpdatePropertyForm form)
{
...Has all passed values but IN THE SAME SOLUTION...
}
public const string uri = "http://localhost:58814/api/sample";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responce = await httpClient.PutAsJsonAsync<AddUpdatePropertyForm>(uri, propertyForm);
...more stuff...
}
}
public const string uri = "http://localhost:58814/api/sample";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new JavaScriptSerializer().Serialize(propertyForm);
var response = await httpClient.PutAsJsonAsync<string>(uri, content);
...more stuff...
}
}
public const字符串uri=”http://localhost:58814/api/sample";
公共异步任务PutAValue()
{
var propertyForm=new AddUpdatePropertyForm();
var网络=新网络{NetworkID=123456};
var branch=new branch{BranchID=1,Channel=Channel.Sales,Overseas=false};
var property=new property{AgentRef=“123”,Published=true,PropertyType=PropertyType.semidoctachedBungalow,Status=TransactionStatus.Available};
propertyForm.Network=网络;
propertyForm.Branch=分支;
propertyForm.Property=属性;
使用(HttpClient HttpClient=new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var response=wait-httpClient.PutAsJsonAsync(uri,propertyForm);
…更多的东西。。。
}
}
解决方案B
public async Task<HttpResponseMessage> Put([FromBody]AddUpdatePropertyForm propertyForm)
{
...propertyForm ALWAYS null...
}
public async Task<HttpResponseMessage> Put([FromBody]string propertyForm)
{
var content = new JavaScriptSerializer().Deserialize<AddUpdatePropertyForm>(propertyForm);
}
public异步任务Put([FromBody]AddUpdatePropertyForm propertyForm)
{
…propertyForm始终为空。。。
}
使用解决方案a和解决方案b工作的代码(但我希望接收对象,而不是字符串-在同一解决方案中传递对象时可以这样做)
解决方案A
public const string uri = "http://localhost:49611/api/Values";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responce = await httpClient.PutAsJsonAsync<AddUpdatePropertyForm>(uri, propertyForm);
...more stuff...
}
}
public void Put([FromBody]AddUpdatePropertyForm form)
{
...Has all passed values but IN THE SAME SOLUTION...
}
public const string uri = "http://localhost:58814/api/sample";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responce = await httpClient.PutAsJsonAsync<AddUpdatePropertyForm>(uri, propertyForm);
...more stuff...
}
}
public const string uri = "http://localhost:58814/api/sample";
public async Task<string> PutAValue()
{
var propertyForm = new AddUpdatePropertyForm();
var network = new Network { NetworkID = 123456 };
var branch = new Branch { BranchID = 1, Channel = Channel.Sales, Overseas = false };
var property = new Property { AgentRef = "123", Published = true, PropertyType = PropertyType.SemiDetachedBungalow, Status = TransactionStatus.Available };
propertyForm.Network = network;
propertyForm.Branch = branch;
propertyForm.Property = property;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new JavaScriptSerializer().Serialize(propertyForm);
var response = await httpClient.PutAsJsonAsync<string>(uri, content);
...more stuff...
}
}
public const字符串uri=”http://localhost:58814/api/sample";
公共异步任务PutAValue()
{
var propertyForm=new AddUpdatePropertyForm();
var网络=新网络{NetworkID=123456};
var branch=new branch{BranchID=1,Channel=Channel.Sales,Overseas=false};
var property=new property{AgentRef=“123”,Published=true,PropertyType=PropertyType.semidoctachedBungalow,Status=TransactionStatus.Available};
propertyForm.Network=网络;
propertyForm.Branch=分支;
propertyForm.Property=属性;
使用(HttpClient HttpClient=new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var content=new JavaScriptSerializer().Serialize(propertyForm);
var response=wait-httpClient.PutAsJsonAsync(uri,内容);
…更多的东西。。。
}
}
解决方案B
public async Task<HttpResponseMessage> Put([FromBody]AddUpdatePropertyForm propertyForm)
{
...propertyForm ALWAYS null...
}
public async Task<HttpResponseMessage> Put([FromBody]string propertyForm)
{
var content = new JavaScriptSerializer().Deserialize<AddUpdatePropertyForm>(propertyForm);
}
公共异步任务Put([FromBody]字符串属性表单)
{
var content=new JavaScriptSerializer()。反序列化(propertyForm);
}
AddUpdatePropertyForm类型是否在解决方案A和解决方案B中重复使用?是的,解决方案A和解决方案B中持有相同的类您可以发布AddUpdatePropertyForm类型吗?AddUpdatePropertyForm类型是否在解决方案A和解决方案B中重复使用?是,解决方案A和解决方案B中包含相同的类您可以发布AddOrUpdatePropeftyForm类型吗?