Я видел ниже, но это добавляет издержки кодирования и декодирования строк.
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
}
}