【问题标题】:how to pass complex object to Web API method?如何将复杂对象传递给 Web API 方法?
【发布时间】:2023-03-03 00:58:01
【问题描述】:

我有两个模型:-

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api c#-5.0


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多