首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是Request.InputStream,什么时候使用它?

什么是Request.InputStream,什么时候使用它?
EN

Stack Overflow用户
提问于 2011-11-13 14:21:10
回答 1查看 18.7K关注 0票数 13

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

在本例中,我可以在data:中传递参数,也可以在Request.InputStream中读取参数。我应该在什么时候使用哪一个?

示例:

在控制器中:

代码语言:javascript
运行
复制
    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请求:

代码语言:javascript
运行
复制
        $.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);
            }
        });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-14 15:00:57

Request.InputStream允许您访问原始请求数据。如果这些数据是使用某种标准格式格式化的,比如application/x-www-form-urlencodedmultipart/form-data,或者其他一些默认模型绑定器可以理解的格式,那么就不需要使用Request.InputStream。ASP.NET将解析请求值,您将能够使用Request[...]直接访问它们。当然,在ASP.NET MVC中,您甚至不需要使用Request[...],因为您可以定义一个视图模型,您的控制器操作将接受该视图模型作为参数,而让模型绑定器从请求中分配其属性。

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

现在回到你的问题上。在您的例子中,您可以定义一个视图模型:

代码语言:javascript
运行
复制
public class MyViewModel
{
    public string SomeData { get; set; }
}

您的控制器操作将以此作为参数:

代码语言:javascript
运行
复制
public ActionResult GetSomeData(MyViewModel model)
{
    // model.SomeData will contain the Hello string that the client sent
    return Json("something");
}

在客户端,我建议您使用内置在现代浏览器中的JSON.stringify方法将请求javascript文本序列化为JSON字符串,而不是像您那样手动编写JSON:

代码语言:javascript
运行
复制
$.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);
    }
});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8110016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档