1

我有两个模型:-

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 方法时,它正在从正文中读取对象。没有问题。但是当我尝试使用一些 Builder 添加任何项目时,它不会调用所需的方法。和我的网络方法:-

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 的新手,欢迎您提出任何建议。请帮忙。

4

1 回答 1

1

您的模型有一个嵌套的类类型对象属性,并且您尝试在 URI 中传递它。我遇到了类似的问题,我的一个工作模型与你的结构完全相同。除非在请求正文中使用序列化的 JSON 或 XML 传递它,否则没有可用的解决方案。因此,我创建了一个自定义模型绑定器,即 FieldValueModelBinder 类。它在您提供的模型(即没有任何集合的对象层次结构)中运行良好且简单。由于数据量不大,用 URI 传递数据还是不错的。

请阅读我的文章并下载我刚刚使用此链接发布的源代码:http: //www.codeproject.com/Articles/701182/A-Custom-Model-Binder-for-Passing-Complex-Objects。我希望这是您需要的理想解决方案。

于 2013-12-26T20:34:05.257 回答