C# 向WCF REST(json)发布请求-WebException(400)错误请求
我想通过web服务(REST-WCF)上传一个文件到db,但我有WebException(400)错误的请求,我读了很多解决方案,但我的代码仍然不工作 .configC# 向WCF REST(json)发布请求-WebException(400)错误请求,c#,json,wcf,rest,webclient,C#,Json,Wcf,Rest,Webclient,我想通过web服务(REST-WCF)上传一个文件到db,但我有WebException(400)错误的请求,我读了很多解决方案,但我的代码仍然不工作 .config <system.serviceModel> <bindings> <webHttpBinding> <!--Limits to 10MB--> <binding name="
<system.serviceModel>
<bindings>
<webHttpBinding>
<!--Limits to 10MB-->
<binding name="ApiQuotaBinding"
maxReceivedMessageSize="1048576000"
maxBufferPoolSize="1048576000"
maxBufferSize="1048576000"
closeTimeout="00:03:00"
openTimeout="00:03:00"
receiveTimeout="00:03:00"
sendTimeout="00:03:00"
>
<readerQuotas maxDepth="32"
maxStringContentLength="104857600"
maxArrayLength="1048576000"
maxBytesPerRead="1048576000"
/>
<security mode="None" />
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="TransferService">
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="ApiQuotaBinding"
contract="ITransferService"
behaviorConfiguration="webHttpBehavior"/>
<endpoint address="mex"
contract="IMetadataExchange"
binding="mexHttpBinding"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior >
<!--To avoid disclosing metadata information, set the values below to false before deployment-->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<!--To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information-->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
和我的请求代码:
private void btnUpload_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave files (*.*)|*.*";
if (open.ShowDialog() == DialogResult.OK)
{
string WaveLocation = open.FileName;
txtUpload.Text = WaveLocation;
byte[] WavebyteArray = File.ReadAllBytes(WaveLocation);
///webClient//////////////////////////////////////////////
WebClient Proxy1 = new WebClient();
Proxy1.Headers["Content-type"] = "application/json";
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer serializerToUplaod = new DataContractJsonSerializer(typeof(byte[]));
serializerToUplaod.WriteObject(ms, WavebyteArray);
byte[] data = Proxy1.UploadData("http://localhost:1866/TransferService.svc/UploadFile", "POST", ms.ToArray());
MemoryStream stream = new MemoryStream(data);
DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(byte[]));
var guID = obj.ReadObject(stream);
lblUpload.Text = guID.ToString();
//////////////////////////////////////////////////////////
}
我认为问题在于您将内容类型设置为application/json。但您正在体内传递一个字节数组。这可能会混淆WCF。尝试使用任何流,而不是将内容类型用作json 如何使用任何流作为内容类型?您应该使用application/octet stream我使用它,但我仍然有相同的例外:(这可能是答案:请参阅
private void btnUpload_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave files (*.*)|*.*";
if (open.ShowDialog() == DialogResult.OK)
{
string WaveLocation = open.FileName;
txtUpload.Text = WaveLocation;
byte[] WavebyteArray = File.ReadAllBytes(WaveLocation);
///webClient//////////////////////////////////////////////
WebClient Proxy1 = new WebClient();
Proxy1.Headers["Content-type"] = "application/json";
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer serializerToUplaod = new DataContractJsonSerializer(typeof(byte[]));
serializerToUplaod.WriteObject(ms, WavebyteArray);
byte[] data = Proxy1.UploadData("http://localhost:1866/TransferService.svc/UploadFile", "POST", ms.ToArray());
MemoryStream stream = new MemoryStream(data);
DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(byte[]));
var guID = obj.ReadObject(stream);
lblUpload.Text = guID.ToString();
//////////////////////////////////////////////////////////
}