繁体   English   中英

如何使用multipart / formdata编码和POST方法使用带有用户名和密码的rest API

[英]How to consume rest API with username and password using multipart/formdata encoding and using POST method

我正在尝试使用此API: https : //clbeta.ecomexpress.in/apiv2/pincodes/ 我能够从邮递员工具获得输出。 但无法从我创建的C#应用​​程序中获取结果。 这些概念对我来说是陌生的,请为此提供帮助。

我也尝试过使用基本身份验证方法,但无法获得结果。

using System;
using System.IO;
using System.Net;
using RestSharp;
using Newtonsoft.Json;
namespace Ecomapisample
{

    public enum Httpverb
    {
        GET,
        POST,
        PUT,
        DELETE
    }

    public enum AuthenticationType
    {
        Basic,
        NTLM
    }
    class Ecomapi
    {
        public string EndPoint { get; set; }
        public Httpverb HttpMethod { get; set; }
        public AutheticationTechnique AuthTech { get; set; }
        public AuthenticationType AuthType { get; set; }
        public string UserName { get; set; }
        public string UserPassword { get; set; }

        public Ecomapi()
        {
            EndPoint = string.Empty;
            HttpMethod = Httpverb.POST;
        }




        public string MakeRequest()
        {
            string strResponseValue = string.Empty;
            HttpWebRequest request =(HttpWebRequest)WebRequest.Create(EndPoint);

            request.Method = HttpMethod.ToString();

            request.ContentType = "application/json";

            request.CookieContainer = new CookieContainer();

            string AuthHeader =  System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(UserName + ":" + UserPassword));
            request.Headers.Add(HttpRequestHeader.Authorization,AuthType.ToString() + AuthHeader);
            HttpWebResponse response = null;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new ApplicationException("Error code in response recieved: " + response.StatusCode.ToString());
                }

                else
                {

                    using (Stream responseStream = response.GetResponseStream())
                    {
                        if (responseStream != null)
                        {
                            using (StreamReader reader = new StreamReader(responseStream))
                            {
                                strResponseValue = reader.ReadToEnd();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                strResponseValue = "{\"errorMessages\":[\"" + ex.Message.ToString() + "\"],\"errors\":{}}";
            }
            finally
            {
                if (response != null)
                {
                    ((IDisposable)response).Dispose();
                }
            }
            return strResponseValue;
        }
    }
}

//来自邮递员工具的代码如下所示。

var client = new 
RestClient("https://clbeta.ecomexpress.in/apiv2/pincodes/");
var request = new RestRequest(Method.POST);
request.AddHeader("Postman-Token", "xxxxxxxxxxxxxxxx");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=---- 
WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=---- 
WebKitFormBoundary7MA4YWxkTrZu0gW", "------ 
WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; 
name=\"username\"\r\n\r\xxxxxxxxxxxxxxxxxx\r\n------ 
WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; 
name=\"password\"\r\n\r\xxxxxxxxxxxxxxxxxxx\r\n------ 
WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

我需要的输出是JSON输出。 请帮忙。

这取决于API的编写方式,但您可能想尝试告诉它接受的内容。 一些API并非默认为JSON,因此您必须通过提供另一个标头向它们发出信号。

request.AddHeader("Accept", "application/json");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM