我想实现一个REST API,并且在我的GET请求上需要一个正文.(如下所述:带请求主体的HTTP GET)
是否有http客户端无法发送带有GET请求的正文?Fiddler能够做到这一点,虽然消息框是红色的.
例如,使用Curl,我可以在GET请求中"发布"数据.这是有效的吗?我的意思是:
谢谢你的帮助.
我有一些Web服务在不同的服务器上运行,我希望有一个Web服务在其余的"前面"运行,以决定应该根据标头值转发请求的Web服务(服务器).
这个想法是客户会发送请求,比如说:
http://api.mysite.com/cars
mysite.com上的API将检查请求,从API密钥中提取信息(在标头中提供)并重定向到适当的服务器,例如
http://server4.mysite.com/api/cars
这会起作用吗?我担心如何将响应(w/data)从"server4"返回给客户端.响应是仅返回给第一台服务器还是客户端实现响应?
我有一种情况,我正在访问ASP.NET Generic Handler以使用JQuery加载数据.但是,由于从JavaScript加载的数据对搜索引擎抓取工具不可见,我决定从C#加载数据,然后将其缓存为JQuery.我的处理程序包含很多逻辑,我不想再在后面的代码上应用.这是我的Handler代码:
public void ProcessRequest(HttpContext context)
        {
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            string jsonString = string.Empty;
            context.Request.InputStream.Position = 0;
            using (var inputStream = new System.IO.StreamReader(context.Request.InputStream))
            {
                jsonString = inputStream.ReadToEnd();
            }
            ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);
            context.Response.ContentType = "text/plain";
            switch (contentType.typeOfContent)
            {
                case 1: context.Response.Write(getUserControlMarkup("SideContent", context, contentType.UCArgs));
                    break;
            }
        }
我可以getUserControlMarkup()从C#调用该函数,但我必须在调用它时应用一些基于URL的条件.该contentType.typeOfContent实际上是基于URL的参数.
如果可能将JSON数据发送到此处理程序,请告诉我如何执行此操作.我试图像这样访问处理程序:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
但它NullReferenceException在行中给出了Handler代码:
ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);
我正在尝试发送一个 GET 请求,如下所示,但我不断收到控制台上的以下错误:
Test_API_Access.Exception:Cannot send a content-body with this verb-type.
System.Net.ProtocolViolationException: Cannot send a content-body with this verb-type.
   at System.Net.HttpWebRequest.CheckProtocol(Boolean onRequestStream)
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at Test_API_Access.Program.Test_API_Access() in c:\Users\<username>\Documents\Visual Studio 2013\Projects\Test_API_Access\Test_API_Access\Program.cs:line 43
我阅读了另一个关于堆栈溢出的相关线程,这里提到:无法发送具有此动词类型的内容正文
但我想,我一直(HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())在我的 try 块中使用 using可以避免这个错误吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Net;
using System.Runtime.Serialization;
using System.IO;
namespace Test_API_Access
{ class Program
   {  static void Main(string[] args)
      { Test_API_Access();}
      private static void Test_API_Access()
       {  var publicKey = …我正在使用 Restsharp 调用 eBay API。代码如下。
    Async Sub fulfillmentPolicies()
        Dim request As New RestRequest(sFulfillmentURL, Method.Get)
        request.AddHeader("Authorization", "Bearer " & uT.access_token)
        request.AddHeader("Content-Type", "application/json")
        Try
            Dim response = Await client.GetAsync(request)
            If response.StatusCode = HttpStatusCode.OK Then
                Dim sR As String = response.Content
                Dim pP As PaymentPolicy = JsonSerializer.Deserialize(Of PaymentPolicy)(sR)
            End If
        Catch ex As Exception
        End Try
    End Sub
客户端设置在此过程之外,因为它被多次使用。
在测试中,当我进行此调用时,我收到错误消息“无法发送具有此动词类型的内容正文”。我可以使用相同的标头在 Postman 中成功进行此调用。对这里发生的事情有什么想法吗?有办法修复吗?