我正在使用WCF和Xamarin这个简单的POST方法。形式。我尝试了不同的格式化和发送数据的方法,以及服务器端的Web配置,但我仍然得到错误的请求错误。这是我在客户端的代码:
OrderContract order = new OrderContract
{
OrderID = "10550",
OrderDate = DateTime.Now.ToString(),
ShippedDate = DateTime.Now.ToString(),
ShipCountry = "india",
OrderTotal = "781"
};
HttpClient httpClient = new HttpClient();
var json = JsonConvert.SerializeObject(order);
var uri = new Uri(string.Format("http://ipaddress/Services/OrderService.svc/PlaceOrder"));
HttpContent httpContent = new StringContent(json);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = await httpClient.PostAsync(uri, httpContent);
await DisplayAlert("", result.ToString(), "OK");
和我在服务器端的代码:
[OperationContract]
[WebInvoke(UriTemplate = "/PlaceOrder",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, Method = "POST")]
void PlaceOrder(OrderContract order);
和我的web.config:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<service name="PortalRestService.OrderService">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="" contract="PortalRestService.IOrderService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
答案 0 :(得分:1)
请试试这个:
var s = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
var jsonString = JsonConvert.SerializeObject(jsonObject,s);
答案 1 :(得分:0)
400错误的请求
响应状态代码表示由于某些原因(例如格式错误的请求语法,无效的请求消息框架或欺骗性的请求路由),服务器无法或不会处理请求。
我发现服务器端的对象参数(如 OrderDetail )格式错误。有一个List<string>
字段,但取string
并抛出此错误。如果您的服务器端没有更聪明的验证包装器,则您将收到 http 400错误请求,这是默认错误。
换句话说,如果您的请求者对象与服务器方法的正确匹配不正确,则会出现此错误