私は2つのモデルを持っています:-
public class Builder
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int BuilderId { get; set; }
public string BuilderName { get; set; }
}
public class Project
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ProjectId { get; set; }
[Required]
public string ProjectName { get; set; }
[Required]
public string Location { get; set; }
[Required]
public int BuilderId { get; set; }
public Builder builder { get; set; }
}
ビルダー クラス オブジェクトをクライアント側から Web API メソッドにポストしようとすると、本体からオブジェクトが読み取られます。それで問題ありません。しかし、ビルダーでプロジェクトを追加しようとすると、目的のメソッドが呼び出されません。そして私のWebメソッド:-
public HttpResponseMessage PostProject([FromUri] Project project)
{
if (ModelState.IsValid)
{
db.Projects.Add(project);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, project);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = project.ProjectId }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
Web APIメソッドを呼び出す私のメソッド:-
public async Task<ActionResult> Create(Project projects)
{
try
{
HttpClient client = new HttpClient();
JavaScriptSerializer serializer = new JavaScriptSerializer();
String contentStr = serializer.Serialize(projects);
ObjectContent content = new ObjectContent(typeof(Project), projects, new JsonMediaTypeFormatter());
HttpResponseMessage putResponse = await client.PostAsync(serviceprovider + "project/postproject", content);
putResponse.EnsureSuccessStatusCode();
return RedirectToAction("Index");
}
catch (HttpRequestException e)
{
return View();
}
}
私の知る限り、オブジェクトが複雑であるため、問題が発生していると思います。私は Web API を初めて使用します。あなたからの提案は大歓迎です。助けてください。