如何使用带有参数的Classic ASP将HTTP POST发送到WEB API?

时间:2013-07-29 20:12:12

标签: asp-classic asp.net-web-api msxml

我正在尝试在另一个端口上的同一台机器上创建对WEB API的调用。它工作正常并发送回字符串并命中.NET断点,但参数永远不会被传递..(它是null)..在传统的ASP代码中,我是否缺少一些东西来传递该字符串? (DataToSend)

我的主叫代码:

  <%
      Response.Buffer = True
      Dim xml
     ' Set xml = Server.CreateObject("Microsoft.XMLHTTP")
    Set xml = server.Createobject("MSXML2.XMLHTTP")

     DataToSend="<?xml version=""1.0"" encoding=""UTF-8""?><codes sku=""123123"" num-codes=""234234"" />"

      xml.Open "POST", _
          "http://localhost:1303/api/RegistrationCode", _
          False

      xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
      xml.setRequestHeader "X-VitalSource-API-Key", "xxx"

      xml.Send DataToSend

      'Display the HTML both as HTML and as text
      Response.Write "<h1>The HTML text</h1><xmp>"
      Response.Write xml.responseText
      Response.Write "</xmp><p><hr><p><h1>The HTML Output</h1>"
      Response.Write xml.responseText
      Set xml = Nothing
%>

WEB API代码:

   public class RegistrationCodeController : ApiController
{
    string testXmlString = "<SomeValue>6</SomeValue>";



       public string Post([FromBody]string value)
    {
        return testXmlString;
    }

}

2 个答案:

答案 0 :(得分:3)

我也遇到了这个问题。迟到的回答,但是......

我有一个案例,我无法在URL中发送数据,因为它非常大并且超出了大小限制,所以我不得不使用POST,而不是GET。经过一些反复试验,这就是我所做的:

在经典的ASP文件中

Public Function PostData(link, data)
    on error resume next

    if link<>"" then
        data = "{'Name': '" & data & "'}"
        data = Replace(data, "'", """")

        Dim oXMLHTTP
        Set oXMLHTTP = CreateObject("Msxml2.XMLHTTP.3.0")
        if oXMLHTTP is nothing then Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")

        oXMLHTTP.Open "POST", link, False
        oXMLHTTP.setRequestHeader "Content-Type", "application/json"
        oXMLHTTP.send data

        If oXMLHTTP.Status = 200 Then
            PostData = oXMLHTTP.responseText
        Else
            response.Write "Status: " & oXMLHTTP.Status & " | "
            response.Write oXMLHTTP.responseText
            response.end
        End If

    end if
End Function

在我的WebAPI功能中:

public class PayLoad
{
    public string Name { get; set; }
}

[Route("api/Values/PostUnidataMethod")]
[HttpPost]
public string PostUnidataMethod([FromBody]PayLoad data)
{
    return data.Name;
}

我对ASP不太熟悉,但我发现了几个使用JSON将数据发送到Web API函数的示例,而不仅仅是一个字符串。所以我创建了一个简单的DTO,然后将数据转换为JSON字符串。请记住将单引号转换为双引号。我喜欢JSONLint来测试数据以确保。

答案 1 :(得分:0)

您可能希望在SO上查看此答案。

Calling REST web services from a classic asp page

另外,使用约定,当使用WebAPI时,我通常会将所有内容传递给URL中的API。该方法将自动选择值。这样的事情可能有所帮助:

[Route("api/some/specific/url/{someValue}/{someValue2}")]
public HttpResponseMessage Get(int someValue, int someValue2)
{
     //Do something with your request
}

你也可以直接将params拉入url

的类中
[Route("api/some/specific/url/{someValue}/{someValue2}")]
public HttpResponseMessage Get([FromURI] SomeClass someClass)
{
     //Do something with your request
}

希望这有帮助!