Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web Api什么是默认的模型绑定器,我在哪里引用它们_C#_Asp.net Web Api - Fatal编程技术网

C# Web Api什么是默认的模型绑定器,我在哪里引用它们

C# Web Api什么是默认的模型绑定器,我在哪里引用它们,c#,asp.net-web-api,C#,Asp.net Web Api,我刚刚开始学习Web Api,在完成了一些教程和小的测试项目后,我觉得有足够的信心构建一个“真实世界”的应用程序 在我第一次创建解决方案时,我删除了我认为不必要的所有内容。在这个练习中,我必须删除一些活页夹,因为当我发布/放置一个复杂对象时,它总是空的 简而言之,我的问题是在web api中,什么是默认的模型绑定器,我在哪里引用它们?下面我详细介绍了我正在尝试做的事情以及我试图解决这个问题的方法 我想做的事 我有两个正在运行的解决方案,每个解决方案中都有相同的类。我正在尝试将一个复杂对象从解决方

我刚刚开始学习Web Api,在完成了一些教程和小的测试项目后,我觉得有足够的信心构建一个“真实世界”的应用程序

在我第一次创建解决方案时,我删除了我认为不必要的所有内容。在这个练习中,我必须删除一些活页夹,因为当我发布/放置一个复杂对象时,它总是空的

简而言之,我的问题是在web api中,什么是默认的模型绑定器,我在哪里引用它们?下面我详细介绍了我正在尝试做的事情以及我试图解决这个问题的方法

我想做的事 我有两个正在运行的解决方案,每个解决方案中都有相同的类。我正在尝试将一个复杂对象从解决方案a传递到解决方案B。当我到达解决方案B中的断点时,传递的值始终为空(解决方案B是我的“真实世界”项目,存在问题)

我尝试过的 在阅读了几个stackoverflow线程之后,我尝试在同一个解决方案中调用一个操作并传递同一个对象,它成功了!比如说

  • 将对象从solutionA.method1传递到solutionA.controller1.action1
  • 将对象从solutionB.method1传递到solutionB.controller1.action1失败(500-内部服务器错误)
我比较了各种解决方案,试图找出我删除的可能导致此问题的内容,但没有任何成功。我可以创建一个新的解决方案来解决问题,但我觉得我不会从这条路线中学到任何东西。如果有人能为我指出正确的方向,我将非常感激,这样我就可以解决这个问题,并了解更多关于web api的知识

在同一解决方案中工作的代码

解决方案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...
    }
}
使用解决方案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类型吗?