statuscode 400 reasonphrase'bad request'版本1.1

时间:2017-02-01 03:25:25

标签: c# wcf xamarin.forms

我正在使用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>

2 个答案:

答案 0 :(得分:1)

请试试这个:

        var s = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
        var jsonString = JsonConvert.SerializeObject(jsonObject,s);

答案 1 :(得分:0)

400错误的请求

响应状态代码表示由于某些原因(例如格式错误的请求语法,无效的请求消息框架或欺骗性的请求路由),服务器无法或不会处理请求。

我发现服务器端的对象参数(如 OrderDetail )格式错误。有一个List<string>字段,但取string并抛出此错误。如果您的服务器端没有更聪明的验证包装器,则您将收到 http 400错误请求,这是默认错误

换句话说,如果您的请求者对象与服务器方法的正确匹配不正确,则会出现此错误

相关问题