Asp.net 你需要一个没有参数的GET缓冲区吗?

Asp.net 你需要一个没有参数的GET缓冲区吗?,asp.net,web-services,url,httprequest,Asp.net,Web Services,Url,Httprequest,如果我对我包装的第三方Api的资源发出OAuth访问令牌请求,例如获取所有客户案例数据 这个GET不需要查询字符串,因为我只是请求返回数据,但我的问题是,我是否仍然需要指定某种类型的请求流(字节数据),或者只是假设ContentLength应该省略,并由请求对象读取为-1 e、 g.我不必担心设置ContentLength或buffer,是吗?我只需要使用流读取器获取返回的.json或API返回给我的任何内容,对吗 HttpWebResponse response;

如果我对我包装的第三方Api的资源发出OAuth访问令牌请求,例如获取所有客户案例数据

这个GET不需要查询字符串,因为我只是请求返回数据,但我的问题是,我是否仍然需要指定某种类型的请求流(字节数据),或者只是假设ContentLength应该省略,并由请求对象读取为-1

e、 g.我不必担心设置ContentLength或buffer,是吗?我只需要使用流读取器获取返回的.json或API返回给我的任何内容,对吗

        HttpWebResponse response;
        Stream dataStream; // data returned from the response
        byte[] buffer = null; // data to send in the request body

        // FYI the "data" variable is just an incoming param to my send method, a string if I want to send data in the request (i.e. json, xml, whatever I am sending if needed)
        if (!string.IsNullOrEmpty(data.Trim())) buffer = Encoding.UTF8.GetBytes(data);

        // the resourceUrl variable I'm specifying for example is "ttp://someThirdPartyApi.com/api/v1/cases.json"
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resourceUrl);

       // I then add an authorization header to the resonse.Headers (not shown here)

        request.ServicePoint.Expect100Continue = false;
        request.PreAuthenticate = true;

        // do we have any data to send in the request -body-??
        if (buffer != null && buffer.Any())
        {
            request.ContentLength = buffer.Length;

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(buffer, 0, buffer.Length);
                stream.Close();
            }
        }

        // no data to send, just get the data returned in the response using a StreamReader

除非您实际发布数据,否则不需要对请求流执行任何操作。根据您所做的工作,您甚至可以使用WebClient及其DownloadString()方法,并避免使用较低级别的WebRequest等所涉及的大量额外代码


当然,您会失去一些控制和灵活性,但如果它是一个简单的API,您可能不需要它。

您尝试过吗?发生了什么事?是的,我正试图远离WebClient,因为我永远不知道我们可能会把它转移到什么环境。我不介意额外的开销,我可以创建助手或实用方法来清理和重用。你是什么意思?你是说迁移到Mono吗?Mono支持WebClient。基于您所处的环境,您没有理由不能使用其中一种--这只是关于您想要的控制级别,仅此而已。是的,如果您需要,没有理由不使用完全控制。当你不知道自己以后是否会受到这些限制的影响时,为什么要为有限制的东西设计呢。始终设计为灵活性,在这种情况下,使用HttpWebRequest或使用流获取数据只需多编写几行代码就可以了……多编写几行代码以使我的应用程序在长期内可扩展并不是什么大问题,因此我们不必再回去重构它。好吧,很明显,这是你的系统,你可以按照自己的意愿构建它。我要提醒你的是,“完全控制”的缺点是你必须编写更多的代码来支持它,这意味着有更多的时间、更多的测试、更多的地方它可能会崩溃,并且有更多的时间让别人知道你在做什么,而他们必须在5年后对它进行故障排除。有时候这是可以的,但是一旦你像你所说的那样进入帮助程序和实用方法,它实际上不仅仅是几行代码。再说一次,这取决于你,我只是想给你一些关于过去咬过我的东西的反馈:)是的,我不介意。我是一个定制型的家伙,我喜欢图案,我喜欢干净。我并不是说我不会使用第三方或插件或快捷方式,但仅仅使用HttpWebRequest并没有什么大不了的,这只是几行额外的代码而已!我的意思是普通,我们必须学会如何编码,我们不能像.NeT开发人员那样,在我们从微软做的每件事上都被100%的掌控。看看Java开发人员,他们没有使用愚蠢的数据集之类的东西。它们编码。当我编写代码时,我不寻求第一个“简单的输出”,我关心的是可扩展性,干净的代码。我们已经习惯了太多的轻松。