Asp.net mvc ASP.NET MVC读取原始JSON Post数据

Asp.net mvc ASP.NET MVC读取原始JSON Post数据,asp.net-mvc,json,jsonfx,Asp.net Mvc,Json,Jsonfx,这让我快发疯了。我正在使用ASP.NETMVC。我有一个带有HttpPost操作的控制器,它充当另一个服务器(不在我的控制下)调用的回调URL。我想动态读取发布到它的JSON,而不使用WebAPI或模型绑定。URL还传递了一个查询字符串参数 回调URL如下所示: 我已尝试使用以下方法阅读发布的输入: [HttpPost] public ActionResult Callback( String secret ) { String jsonData = new StreamReader(

这让我快发疯了。我正在使用ASP.NETMVC。我有一个带有HttpPost操作的控制器,它充当另一个服务器(不在我的控制下)调用的回调URL。我想动态读取发布到它的JSON,而不使用WebAPI或模型绑定。URL还传递了一个查询字符串参数

回调URL如下所示:

我已尝试使用以下方法阅读发布的输入:

[HttpPost]
public ActionResult Callback( String secret )
{
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd();

    // ...
}
但是,“jsonData”始终为null或空

我只想获取发布的输入并将其粘贴到JsonFx中,以便动态访问内容。关于如何以最简单的方式做到这一点,有什么想法吗

更新

我发现了以下几点

虽然上面的方法不起作用(jsonData将为null或空),但如果我配置调用服务器上的一些小选项,从而忽略“secret”查询字符串参数,那么下面的方法会起作用,因为它不是我的服务器,所以这是我在这方面所能做的全部。在这种情况下,jsonData将具有正确的发布JSON字符串:

[HttpPost]
public ActionResult Callback( /* String secret */ )
{
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd();

    // ...
}
这是非常令人沮丧的工作,我不知道一个简单的方法来接受查询字符串和标准MVC控制器上发布的JSON数据

我有一个带有操作方法的“回调控制器”,可以从不同的第三方服务器接收各种数据(通过GET、通过formpost、通过JSON POST、通过JSON POST w/a查询字符串等)。这些是商家类型的回调,我无法控制用于传递信息的格式或方法。我只需要接受回调并处理应该存在的信息

在我的控制器中,除了“JSON POST w/a查询字符串”之外,所有这些都可以正常工作

这似乎(至少对我来说)是标准ASP.NET MVC控制器的一个缺点


有人能提出一个解决方案,可以在标准ASP.NET MVC控制器中使用吗?

如果考虑到ASP.NET MVC模型绑定已经读取了流,那么您的初始方法应该是可行的,因此您应该将其回放:

[HttpPost]
public ActionResult Callback(string secret)
{
    Request.InputStream.Seek(0, SeekOrigin.Begin);
    string jsonData = new StreamReader(Request.InputStream).ReadToEnd();

    // ...
}

读取流之前,将
位置
重置为

Request.InputStream.Position=0

对于ASP.NET Core 2,这对我很有用

    [HttpPost]
    public ActionResult RawTest() {
        using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
        {  
            string content = reader.ReadToEndAsync().Result;
            //...
        }
        //...
    }

当你发布它时,让所有的json都相等
jsonData
。e、 g.
[{jsonData:[{…所有json东西…}]}]我还没有测试过这个,但它可能会工作。我无法控制发布信息的服务器。我在上面添加了一个更新。为什么选择名称“jsonData”?,json数据可能来自不同的名称,请尝试检查FormCollection的名称。太棒了!非常感谢你。我知道必须有一个简单的解决方案。这确实有效,但有什么想法吗