Javascript 如果我传递序列化的json数据,它在http请求中出现在哪里?

Javascript 如果我传递序列化的json数据,它在http请求中出现在哪里?,javascript,c#,json,Javascript,C#,Json,我正在尝试这样做:在序列化的JSON数据中插入http验证令牌。我已经能够在JSON中正常地传递它,也能够使用自定义授权扩展在头中传递它。我想做的是,在验证器中,如果请求不在头数据或表单数据中,则反序列化传递的数据并查看其中的内容。不过,我实际上无法在请求中找到数据。当我读取传递的数据(84字节)时,我得到的只是一堆数字 以下是防伪验证器: namespace dispatchrude.Extensions { [AttributeUsage(AttributeTargets.Method |

我正在尝试这样做:在序列化的JSON数据中插入http验证令牌。我已经能够在JSON中正常地传递它,也能够使用自定义授权扩展在头中传递它。我想做的是,在验证器中,如果请求不在头数据或表单数据中,则反序列化传递的数据并查看其中的内容。不过,我实际上无法在请求中找到数据。当我读取传递的数据(84字节)时,我得到的只是一堆数字

以下是防伪验证器:

namespace dispatchrude.Extensions
{
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,
AllowMultiple=false,Inherited=true)]
公共密封类ValidateHeaderAntiForgeryTokenAttribute:FilterAttribute,IAAuthorizationFilter
{
授权时的公共无效(AuthorizationContext filterContext)
{
如果(filterContext==null)
{
抛出新ArgumentNullException(“filterContext”);
}
var httpContext=filterContext.httpContext;
var cookie=httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
//先试试页眉
var-token=httpContext.Request.Headers[“uu-RequestVerificationToken”];
//尝试正常方法
if(标记==null)
{
for(int cl=0;cl
下面是我们序列化表单数据的一些示例代码:

$.ajax({
类型:“POST”,
标题:appendVerificationToken(),
url:“/ordercolution/SessionApplyRatesCancel”,
data:JSON.stringify({key:data.key}),
contentType:“应用程序/json”,
成功:函数(){
/*决定不关闭窗口(只需取消并显示[CANCELLED]说明)
//成功后,关闭弹出窗口
runFuncByNameSingleParameter(_owningPopup.Close);
*/
}
});

正如我所说,将其传递到标题中是可行的,但我希望能够将其添加到数据中,而在解析它的请求中找不到它。

多亏了Ourobrus,我才想出了一个解决方案。 这项工作:

           string json;
            var position = httpContext.Request.InputStream.Position;
            using (var reader = new StreamReader(httpContext.Request.InputStream, Encoding.UTF8, false, 8192, true))
            { 
                json = reader.ReadToEnd();
                //you MUST reset the input stream to start or you will break post.
                httpContext.Request.InputStream.Seek(position, SeekOrigin.Begin);
                try
                {
                    var jsonObj = Json.Decode(json); //attempt to parse into json object.  
                    token = jsonObj["__RequestVerificationToken"];
                }
                catch
                {
                    //eat the parse errors.  That simply means it's not json.
                }
            }

我希望它能帮助别人。请注意,您必须按照我的操作方式将流重置回零,否则控制器函数将不会接收任何传递的数据。

由于您提交请求的方式,JSON构成了请求的整个主体。它不是表单编码的数据。你可以通过多种方式得到那具尸体。一种方法(虽然不一定是最好的)是
stringrequestbody=wait-httpRequest.Content.ReadAsStringAsync()。我会试着这样读,看看我是否得到了一个好的结果,谢谢。虽然我无法像你发布的那样阅读它(这是一个注释,所以我不认为我可以使它异步),而且它内置在filtercontext中,但你关于它的信息成为了整个请求,足以让我找到正确的解决方案。这是有效的:使用(var reader=newstreamreader(httpContext.Request.InputStream)){json=reader.ReadToEnd();}如果你给出某种答案,我会接受。同时,我会留下一个“占位符”的答案。