Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 什么是Request.InputStream以及何时使用它?_Asp.net Mvc_Asp.net Mvc 3_Jquery - Fatal编程技术网

Asp.net mvc 什么是Request.InputStream以及何时使用它?

Asp.net mvc 什么是Request.InputStream以及何时使用它?,asp.net-mvc,asp.net-mvc-3,jquery,Asp.net Mvc,Asp.net Mvc 3,Jquery,问题很简单。什么是Request.InputStream以及何时使用它。它总是用来读取post请求中发送的整个html正文,还是只读取其中发送的一些参数?为什么我不应该通过在Ajax请求中传递数据来将数据作为参数发送到服务器端代码 在本例中,我可以在数据:中传递参数,也可以在请求.InputStream中读取参数。我什么时候应该用哪一种 例如: 在控制器中: public ActionResult GetSomeData(string someData) { Re

问题很简单。什么是
Request.InputStream
以及何时使用它。它总是用来读取post请求中发送的整个html正文,还是只读取其中发送的一些参数?为什么我不应该通过在Ajax请求中传递数据来将数据作为参数发送到服务器端代码

在本例中,我可以在
数据:
中传递参数,也可以在
请求.InputStream
中读取参数。我什么时候应该用哪一种

例如:

在控制器中:

    public ActionResult GetSomeData(string someData)
    {
        Request.InputStream.Position = 0;
        System.IO.StreamReader str = new System.IO.StreamReader(Request.InputStream);
        string sBuf = str.ReadToEnd();
        return Json("something");
    }
Ajax请求:

        $.ajax({
            type: "POST",
            url: "Home/GetSomeData",
            data: "{someData:'Hello'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                alert(msg);
                // Insert the returned HTML into the <div>.
                $('#dvResult').html(msg);
            }
        });
$.ajax({
类型:“POST”,
url:“主页/GetSomeData”,
数据:“{someData:'Hello'}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
警报(msg);
//将返回的HTML插入到。
$('#dvResult').html(msg);
}
});

请求。InputStream允许您访问原始请求数据。如果使用一些标准格式格式化此数据,例如
应用程序/x-www-form-urlencoded
多部分/表单数据
或默认模型绑定器理解的其他格式,则无需使用
请求.InputStream
。ASP.NET将解析请求值,您可以使用
request[…]
直接访问它们。当然,在ASP.NET MVC中,您甚至不需要使用
Request[…]
,因为您可以定义一个视图模型,控制器操作将其作为参数,并让模型绑定器从请求中分配其属性

但是,在某些情况下,您可能希望访问原始请求流。例如,您发明了一些自定义协议,客户端在请求流中发送一些自定义格式的数据。这种情况非常罕见,因为发明定制协议并不常见

现在回到你的问题上来。在您的情况下,可以定义视图模型:

public class MyViewModel
{
    public string SomeData { get; set; }
}
控制器操作将以哪个作为参数:

public ActionResult GetSomeData(MyViewModel model)
{
    // model.SomeData will contain the Hello string that the client sent
    return Json("something");
}
在客户机上,我建议您使用内置于现代浏览器中的
JSON.stringify
方法将请求javascript文本JSON序列化为JSON字符串,而不是像您那样手动编写JSON:

$.ajax({
    type: 'POST',
    url: 'Home/GetSomeData',
    data: JSON.stringify({ someData: 'Hello' }),
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {
        alert(msg);
        // Insert the returned HTML into the <div>.
        $('#dvResult').html(msg);
    }
});
$.ajax({
键入:“POST”,
url:'主页/GetSomeData',
data:JSON.stringify({someData:'Hello'}),
contentType:'application/json;charset=utf-8',
成功:功能(msg){
警报(msg);
//将返回的HTML插入到。
$('#dvResult').html(msg);
}
});