我正在使用以下javascript代码发送数据:
xhr = new XMLHttpRequest();
xhr.addEventListener('readystatechange', onStateChange);
xhr.open('POST', 'SavePage');
xhr.setRequestHeader('RequestVerificationToken', token);
xhr.send(payload);
然后在我的SavePage.cshtml文件中,我尝试以多种不同的方式直接从正文读取内容,我获得了Content-Length,并且知道我的数据长162个字节。
我尝试了这个简单的例子:
var buffer = new byte[1024];
var info = HttpContext.Request.Body.Read(buffer, 0, 5);
代码进入第二行,然后只是挂起,我尝试以各种方式将代码挂起。如果我尝试从HttpContext.Request.Form读取,它也会挂起。
当我检查Chrome时,这是发布的内容:
------WebKitFormBoundary2uFNJ1OvmPRrGH1P
Content-Disposition: form-data; name="main-content"
<p>
test
</p>
------WebKitFormBoundary2uFNJ1OvmPRrGH1P--
我在这里想念的是什么,我是否应该只能从身体上阅读? 还是可能不是已经发送了整个正文,但是为什么我现在已经在代码中了?
仅供参考,我正在发送html文本的一部分,只是想对其进行处理。认为仅从身体读取并自己处理它可能很容易。但是,尽管我对C#并不陌生,但我是Core和ASP上的真正新手,尤其是结合使用。
我现在尝试用ApiController替换cshtml文件:
[Route("api/[controller]")]
[ApiController]
public class SavePageController : ControllerBase
{
[HttpPost]
public void SavePage([FromBody] string htmlString)
{
// done what was posted is in htmlString argument
}
}
但随后我收到了400错误请求?我在添加RequestVerificationToken之前就已经知道了,但是正在发送吗?不知道那是怎么回事?
答案 0 :(得分:0)
要将字符串发送给控制器操作:
.net
[HttpPost]
public void SavePage([FromBody] string htmlString)
{
// done what was posted is in htmlString argument
}
xhr Java脚本与您的示例完全相同。