2013-07-29 4 views
2

Я пытаюсь создать вызов WEB API на той же машине на другом порту. Он отлично работает и отправляет обратно строку и удаляет точку останова .NET, но параметр никогда не передается. (Это значение равно null). Есть ли что-то, что мне не хватает в классическом ASP-коде для передачи этой строки? (DataToSend)Как отправить HTTP POST из классического ASP с параметром в WEB API?

Мой код вызова:

<% 
     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

Вы можете посмотреть на этот ответ на SO.

Calling REST web services from a classic asp page

Кроме того, идя с конвенциями, при использовании WebAPI я вообще передать все к API в URL. Метод автоматически выберет значения. Нечто подобное может помочь:

[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 
} 

Надеется, что это помогает!

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 для отправки данных в функцию веб-API, а не только для строки. Поэтому я создал простой DTO, а затем сделал данные в строку JSON. Не забудьте конвертировать одиночные кавычки в двойные кавычки. Мне нравится JSONLint, чтобы проверить данные, чтобы убедиться.

+1

Спасибо Пит. Помог мне массово здесь (проклинай старый код ASP)! –