我正在尝试在另一个端口上的同一台机器上创建对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;
}
}
答案 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
}
希望这有帮助!