Asp.net 用于插入复杂类型数据的Web Api POST始终为空
我对Web Api的概念很陌生。尝试使用Microsoft提供的基本项目插入数据(将简单测试客户端添加到ASP.NET Web API帮助页) 下面是将数据插入总部表的代码。(HeadofficeID int、HeadofficeName varchar(50)、Notes varchar(1000)、Isactive位) 总部模型类Asp.net 用于插入复杂类型数据的Web Api POST始终为空,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,asp.net-web-api2,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Asp.net Web Api2,我对Web Api的概念很陌生。尝试使用Microsoft提供的基本项目插入数据(将简单测试客户端添加到ASP.NET Web API帮助页) 下面是将数据插入总部表的代码。(HeadofficeID int、HeadofficeName varchar(50)、Notes varchar(1000)、Isactive位) 总部模型类 public partial class HeadOfficeModel : AtlAuthenticationModelBase {
public partial class HeadOfficeModel : AtlAuthenticationModelBase
{
public int HeadOfficeId { get; set; }
public string HeadOfficeName { get; set; }
public string Notes { get; set; }
public bool IsActive { get; set; }
}
在前端,当我尝试从URI或Body发送数据时,只插入空值。在调试时,我在总部模型中看到的只有空值
1) {"HeadOfficeName":"TestHO1", "Notes":"notes", "IsActive":true}
2) {"TestHO1", "notes", true}
3) ={"headOffices":{"HeadOfficeName":"TestHO1","Notes":"notes","IsActive":false}}
并尝试更改代码,如下所示
public HttpResponseMessage Post([FromUri]HeadOfficeModel headOffices)
public HttpResponseMessage Post([FromBody]HeadOfficeModel headOffices)
public HttpResponseMessage Post([ModelBinder]HeadOfficeModel headOffices)
两天来一直在努力解决这个问题。当我以复杂类型发送数据时,它不作为单独的参数工作(更改方法以接受参数),工作正常
public int Post(string Name, string Notes, bool Active)
{
HeadOfficeModel objHOM = new HeadOfficeModel();
objHOM.HeadofficeName = Name;
objHOM.Notes = Notes;
objHOM.IsActive = Active;
return _headOfficeBLL.Insert(objHOM);
}
下面是我在插入时打钩的html代码
<script>
testClientModel = {
HttpMethod: '@Model.ApiDescription.HttpMethod',
UriPathTemplate: @Html.Raw(Json.Encode(Model.ApiDescription.RelativePath)),
UriParameters: [
@foreach (var parameter in Model.ApiDescription.ParameterDescriptions)
{
if (parameter.Source == System.Web.Http.Description.ApiParameterSource.FromUri)
{
@:{ name: "@parameter.Name", value: "" },
}
}
],
Samples: {
@Html.Raw(@String.Join(",", Model.SampleRequests.Select(s => String.Format("\"{0}\": \"{1}\"", s.Key, HttpUtility.UrlEncode(s.Value.ToString()))).ToArray()))
},
BaseAddress: '@applicationPath'
};
</script>
testClientModel={
HttpMethod:“@Model.apisdescription.HttpMethod”,
UriPathTemplate:@Html.Raw(Json.Encode(Model.apiscription.RelativePath)),
URI参数:[
@foreach(Model.apiscription.ParameterDescriptions中的var参数)
{
if(parameter.Source==System.Web.Http.Description.apipParameterSource.FromUri)
{
@:{name:@parameter.name”,值:},
}
}
],
样本:{
@Html.Raw(@String.Join(“,”,Model.SampleRequests.Select(s=>String.Format(“\”{0}\”:\“{1}\”,s.Key,HttpUtility.UrlEncode(s.Value.ToString()))).ToArray())
},
基本地址:“@applicationPath”
};
你能帮我一下我哪里出了问题吗。附加屏幕截图
在URI和Body中输入只是为了表明我尝试了不同的方法。
您是否会共享使用该方法的代码?[POST(“create”)]public HttpResponseMessage POST([FromUri]headoffice-model-headOffices){if(_-headofficebl.Insert(headOffices)>0)return Request.CreateResponse(HttpStatusCode.Created,headOffices);else return Request.CreateResponse(HttpStatusCode.BadRequest,总部);}我不是在说这个。我想知道你从哪里调用这个方法?它是ajax还是html格式?嗨,Mahbubur,下面是代码testClientModel={HttpMethod:'@Model.apisdescription.HttpMethod',UriPathTemplate:@html.Raw(Json.Encode(Model.apisdescription.RelativePath)),UriParameters:[@foreach(Model.apisdescription.ParameterDescriptions中的var参数){如果(parameter.Source==System.Web.Http.Description.ApiParameterSource.FromUri){@:{name:“@parameter.name”,value:”},},}),Samples:@Html.Raw(@String.Join(“,”,Model.SampleRequests.Select)(s=>String.Format(“\“{0}\”:“{1}\”,s.Key,HttpUtility.UrlEncode(s.value.ToString()))).ToArray())},BaseAddress:“@applicationPath”};如果您在注释中编写代码,则无法理解。您可以使用此更新您的问题。
<script>
testClientModel = {
HttpMethod: '@Model.ApiDescription.HttpMethod',
UriPathTemplate: @Html.Raw(Json.Encode(Model.ApiDescription.RelativePath)),
UriParameters: [
@foreach (var parameter in Model.ApiDescription.ParameterDescriptions)
{
if (parameter.Source == System.Web.Http.Description.ApiParameterSource.FromUri)
{
@:{ name: "@parameter.Name", value: "" },
}
}
],
Samples: {
@Html.Raw(@String.Join(",", Model.SampleRequests.Select(s => String.Format("\"{0}\": \"{1}\"", s.Key, HttpUtility.UrlEncode(s.Value.ToString()))).ToArray()))
},
BaseAddress: '@applicationPath'
};
</script>