C# отправить байт [] как JSON в конечную точку отдыха WCF. ошибка 400, неверный запрос - PullRequest
1 голос
/ 17 марта 2020

Я видел ниже, но это добавляет издержки кодирования и декодирования строк.

C# - Отправить byte [] как часть json объекта, используя HttpWebRequest

У меня есть объект запроса, как показано ниже

[DataContract]
public class MyRequest
{
 [DataMember]
 public byte[] SampleByteArray { get; set; }

 [DataMember]
 public string UserId { get; set; }

}

У меня есть метод ниже, который возвращает байт []

public byte[] SerializeToByteArray<T>(T input)
{
  byte[] byteArray = null;
  BinaryFormatter bf = new BinaryFormatter();
  using (MemoryStream ms = new MemoryStream())
  {
    bf.Serialize(ms, input);
    byteArray = ms.ToArray();
  }
  return byteArray;
}

Я создаю объект запроса, как показано ниже

MyRequest myRequest = new MyRequest();
myRequest.SampleByteArray = SerializeToByteArray(myDTO);
myRequest.UserId = "XXX";

Я делаю свой объект HttpWebRequest, как показано ниже

HttpWebRequest request = WebRequest.CreateHttp(url);
request.ContentType = "application/json";
request.KeepAlive = false;

//100,000 milliseconds (100 seconds) need 10 minutes 
request.Timeout = (int)TimeSpan.FromMinutes(10).TotalMilliseconds;
string stringfydata = Newtonsoft.Json.JsonConvert.SerializeObject(myRequest);
byte[] data = Encoding.UTF8.GetBytes(stringfydata);
request.ContentLength = data.Length;
var requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();

Я делаю вызов WCF Rest, как показано ниже

string responseData;
using (WebResponse response = request.GetResponse())
{
   using (var respStream = response.GetResponseStream())
   {
      using (var reader = new System.IO.StreamReader(respStream)
      {
          responseData = reader.ReadToEnd();
      }
   }
}

Я получаю исключение 400 Bad Request в

WebResponse response = request.GetResponse()

Для проверки я изменил свой код, как показано ниже, и теперь, по крайней мере, мой сервисный код получен, и я получаю действительно хорошее сообщение об исключении, которое показывает, что мой сервис работает.

MyRequest myRequest = new MyRequest();
myRequest.SampleByteArray = null;
myRequest.UserId = "XXX";

Похоже, я возникли проблемы с отправкой байта [] в мой сервис.

Может кто-нибудь сказать мне, как отправить байт [] в качестве свойства объекта, который конвертируется в формат JSON и вызывает конечную точку отдыха WCF.

См. Ниже мой сервис кратко.

[ServiceContract]
public interface IMyInterface
{
  [Description("My test method")]
  [OperationContract]
  [WebInvoke(
    UriTemplate = "mymethod",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json
   )]
  ServiceResponse GetResponse(MyRequest request);
}

public class MyInterface : IMyInterface
{
 public ServiceResponse GetResponse(MyRequest request)
 {
  .... code goes here
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...