Uwakpeter Ответов: 1

Как получить post-запрос, содержащий XML, из другого приложения с помощью ASP.NET REST api


Я пытаюсь написать REST webservice api, который будет извлекать xml-данные из post-запроса в другом приложении.

Что я уже пробовал:

запрос post:
protected void Button1_Click(object sender, EventArgs e)
    {
        string xmlMessage = "<?xml version=\"1.0\" encoding=\"UTF - 8\" ?>< PaymentNotification >< SessionID > 000001100913103301000000000001 </ SessionID > < RequestorID > 0000000001 </ RequestorID > < PayerPhoneNumber > 08060000000 </ PayerPhoneNumber > </ PaymentNotification >\r\n";
        // "construct your xml request message as required by that method along with parameters";
        string url = "http://localhost:8921/api/billpayment";

        postXMLData(url, xmlMessage);
    }

    public void postXMLData(string destinationUrl, string requestXml)
    {

        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);

        var req = (HttpWebRequest)WebRequest.Create(destinationUrl);

        req.ContentType = "text/xml";
        req.Method = "POST";
        req.ContentLength = bytes.Length;

        using (Stream os = req.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }

        string response = "";

        using (WebResponse resp = req.GetResponse())
        {
            using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
            {
                response = sr.ReadToEnd().Trim();
            }
        }
    }


запрос get:


public class BillPaymentController : ApiController
{
    private const string URL = "http://localhost:8921/api/billpayment";
    private string urlParameters = "?api_key={55EB9B66-7B89-4FB2-AE6B-6FEAA78AC10C}";
    // POST api/billpayment
    // POST api/values
    public string GetRequest([FromBody]string value)
    {

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(URL);

        // Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/xml"));

        // List data response.
        HttpResponseMessage response = client.GetAsync(urlParameters).Result;  // Blocking call!
        if (response.IsSuccessStatusCode)
        {
            // Parse the response body. Blocking!
            var dataObjects = response.Content.ReadAsAsync<IEnumerable<BillPaymentClass>>().Result;
            foreach (var d in dataObjects)
            {
                Console.WriteLine("{0}", d.MerchantName);
            }
        }
        else
        {
            Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
        }
        return "";
    }


}


Но у меня есть эта ошибка:

Удаленный сервер вернул ошибку: (405) метод не разрешен для метода Post Request, а также Get-запрос не работает. пытался это исправить, но пока не повезло, любая помощь будет оценена по достоинству

1 Ответов

Рейтинг:
1

David_Wimbley

Не запустив свой код, я думаю, что проблема заключается в том, что вам нужно украсить свое действие ApiControllers соответствующим атрибутом http verb.

public string GetRequest([FromBody]string value)
    {


должен выглядеть так

[HttpGet]
public string GetRequest([FromBody]string value)
    {


И если бы вы пытались написать действие API, которое использовало POST, то вы бы добавили [HttpPost] вместо [HttpGet]

Но следует отметить одну вещь: для запроса Get вам нужно будет удалить FromBody, так что если это должен был быть пост, то используйте [HttpPost]


Uwakpeter

Я попробовал ваше предложение, но безуспешно.