【问题标题】:Posting and reading Json through different controllers通过不同的控制器发布和读取 Json
【发布时间】:2015-06-16 15:13:44
【问题描述】:

我想将一个对象从控制器 A 发送到控制器 B。哪个参数必须接收 B 以处理我使用 POST 从 A 发送的数据。

A 上的 POST 是在控制器内部使用 HttpClient 而不是通过 jquery 进行的

【问题讨论】:

  • 您的数据是 JSON 格式的字符串吗?如果是这样,那么该 JSON 字符串就是您的 HTTP 请求的主体,而您的 HTTP 标头将是 application/json。
  • 如果不是,那么显示控制器 A 和 B 的两种操作方法的代码可能会澄清您的要求。

标签: json asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5


【解决方案1】:

假设你有一个视图模型:

public class MyViewModel
{
    public int Id { get; set; }
    public string Foo { get; set; }
}

控制器 B 的操作作为参数:

public ActionResult MyAction(MyViewModel model)
{
    ...
}

您可以使用 HttpClient 将模型作为 JSON 发送:

var model = new MyViewModel
{
    Id = 123,
    Foo = "bar",
};
string data = JsonConvert.SerializeObject(model);
var httpClient = new HttpClient();
var content = new StringContent(data, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(uri, content);

【讨论】:

  • 如果我的 Controller A 托管在不同的项目上并且它们不共享相同的 ViewModel(但您可以发送 json),我该如何从参数中读取 Json?跨度>
  • 在所有情况下,您都需要发送正确的 JSON。因此,要么将此MyViewModel 类移动到两个控制器之间共享的第三个公共项目,要么将其复制到客户端项目中。我不确定你的问题是什么意思:how can I read the Json from the parameter? 你在说什么参数?它的结构是什么?它与控制器 B 的期望相同吗?它是如何发送到控制器 A 的?
  • 我可以像字符串一样从参数中读取json并反序列化吗?如果是,该方法的签名是什么?
  • 我尝试了这种方法但没有成功,帖子中收到的模型内部带有空值,即使我用 Json 得到的响应也为空,但是当我发布所有模型时,他们有正确的值
猜你喜欢
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2016-05-28
  • 2012-01-25
  • 2016-07-05
  • 2014-10-08
相关资源
最近更新 更多