C# 直接阅读文章正文

C# 直接阅读文章正文,c#,asp.net-core,asp.net-core-mvc,asp.net-core-2.0,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.0,我正在使用Google的re-captcha v2,Google的Javascript在运行时动态生成一个表单参数,键为g-recaptcha-response。标记如下所示: <form method="post"> <div class="g-recaptcha" data-sitekey="6LcXjGYUAAAAA...g1UKiZ"></div> <input type="submit" id="submit" value="E

我正在使用Google的re-captcha v2,Google的Javascript在运行时动态生成一个表单参数,键为
g-recaptcha-response
。标记如下所示:

<form method="post">
    <div class="g-recaptcha" data-sitekey="6LcXjGYUAAAAA...g1UKiZ"></div>
    <input type="submit" id="submit" value="Enter" />
</form>
<script src='https://www.google.com/recaptcha/api.js'></script>
我不知道如何在这种情况下使用模型。因此,我尝试使用以下代码直接读取请求正文:

public async Task<IActionResult> OnPostAsync()
{
    String result;
    using (StreamReader reader = new StreamReader(Request.Body)) {
        result = await reader.ReadToEndAsync();
        return RedirectToPage("/test");
    }
}
公共异步任务OnPostAsync() { 字符串结果; 使用(StreamReader=newstreamreader(Request.Body)){ 结果=等待读卡器。ReadToEndAsync(); 返回到Topage(“/test”); } }
结果
始终是一个空字符串,尽管我可以看到有来自检查Http流的数据。上面的代码有错误吗?它编译和运行时不会出错

或者是否有一个内置类或方法可以以Json等格式返回post数据

…是否有一个内置类或方法可以以Json等格式返回post数据

您的示例是发布表单url编码的数据。内置属性可以将其绑定到
字典
模型。Newtonsoft可以将该模型转换为JSON供服务器端使用,而
JsonResult
可以将该模型转换为JSON供客户端使用

[HttpPost]
public IActionResult Post([FromForm] Dictionary<string,string> model)
{
    // convert to JSON
    var json = Newtonsoft.Json.JsonConvert
        .SerializeObject(model, Newtonsoft.Json.Formatting.Indented);

    Console.WriteLine(json);

    // return JSON
    return new JsonResult(model);
}
…然后我们将看到以下控制台输出

{                                                   
  "g-recaptcha-response": "03AEMEkE....nLXmlhwEE",  
  "__RequestVerificationToken": "CfDJ8Oe....93pb"   
}

你可以分享你正在使用的javascript吗?我建议您在操作中放置一个断点,并检查请求属性“search”以查找本应发送的“g-recaptcha-response”。也许您可以自定义js生成的输入名称。您好,我已经添加了标记。我有一个断点,但是
请求。Body
是一个
对象,我不知道如何查看它的内容
Request.Form.Keys
显示
g-recaptcha-response
是提交的密钥之一,因此数据肯定在那里。看看这篇文章,看看它是否揭示了库本身看起来很有趣,可能会为您节省一些麻烦。链接是关于任务的后半部分,获取表单数据后与Google进行验证。但是从示例代码中,答案就像请求一样简单!谢谢。@OldGeezer我看到新消息,这篇文章使用了
application/x-www-form-urlencoded
。因此,我们需要
FromForm
属性。读得好。
POST http://localhost:5000/api/values HTTP/1.1
User-Agent: Fiddler
Host: localhost:5000
Content-Length: 85
Content-Type: application/x-www-form-urlencoded

g-recaptcha-response=03AEMEkE....nLXmlhwEE&__RequestVerificationToken=CfDJ8Oe....93pb
{                                                   
  "g-recaptcha-response": "03AEMEkE....nLXmlhwEE",  
  "__RequestVerificationToken": "CfDJ8Oe....93pb"   
}