REST服务正在获取400个错误请求

本文关键字:400个 错误 请求 获取 服务 REST | 更新日期: 2023-09-27 18:00:12

我在c#中创建了一个restful web服务。当我调用POST方法时,我得到了400个坏请求错误。我正在fiddler中检查我的请求,POST请求非常好。我不明白我的程序出了什么问题。

以下是一些代码片段。如果你们中的任何人需要任何其他代码来查看,请询问。

接口

[ServiceContract]
public interface IRead
{
    [OperationContract]
    [WebInvoke(UriTemplate = "GetCard", Method = "POST")]
    someObject GetCard(Session session);
}

NFCSession是一个对象,它有一个名为session的int变量。

客户端生成POST请求

public void GetCard()
{
        string strGetCard = "http://localhost:8384/Reader/GetCard";
        byte[] dataByte = GenerateNFCSession(63315152);
        HttpWebRequest POSTRequest = (HttpWebRequest)WebRequest.Create(strGetCard);
        POSTRequest.Method = "POST";
        POSTRequest.ContentType = "application/xml;charset=UTF-8";
        POSTRequest.ContentLength = dataByte.Length;
        Stream POSTstream = POSTRequest.GetRequestStream();
        POSTstream.Write(dataByte, 0, dataByte.Length);
        HttpWebResponse POSTResponse = (HttpWebResponse)POSTRequest.GetResponse();
        StreamReader reader =
          new StreamReader(POSTResponse.GetResponseStream(), Encoding.UTF8);
        Console.WriteLine("Response");
        Console.WriteLine(reader.ReadToEnd().ToString());
}

XML生成器

private static byte[] GenerateXML(int sessionID)
    {
        MemoryStream mStream = new MemoryStream();
        XmlTextWriter xmlWriter = new XmlTextWriter(mStream, Encoding.UTF8);
        xmlWriter.Formatting = Formatting.Indented;
        xmlWriter.WriteStartDocument();
        xmlWriter.WriteStartElement("Session");
            xmlWriter.WriteStartElement("session");
                xmlWriter.WriteString(sessionID.ToString());
            xmlWriter.WriteEndElement();
        xmlWriter.WriteEndElement();
        xmlWriter.WriteEndDocument();
        xmlWriter.Flush();
        xmlWriter.Close();
        Console.WriteLine(mStream.ToArray().ToString());
        return mStream.ToArray();
    }

web.config

<?xml version="1.0"?>
<configuration>
<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
  <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, 
System.Web,Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
</system.webServer>
<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" faultExceptionEnabled="true"
automaticFormatSelectionEnabled="true"></standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

来自Fiddler 的POST请求XML

<?xml version="1.0" encoding="utf-8"?>
<Session>
  <session>63315152</session>
</Session>

我收到这个错误

The server encountered an error processing the request.

注意:当我提供XmlSerializer格式属性时,它可以正常工作。但我希望我的服务稍后也能处理JSON请求。从我的角度来看,没有必要显式地提供format属性。我真的不明白这个代码出了什么问题。

伙计们请帮忙!!!

REST服务正在获取400个错误请求

尝试在行为标记中添加<enableWebScript />

...
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
      <enableWebScript />
    </behavior>
  </serviceBehaviors>
</behaviors>
...

这里讨论:http://social.msdn.microsoft.com/Forums/en/wcf/thread/fb48999f-cd41-49b8-ae9a-f0c8f5aebbd2

我的Web服务现在运行良好。

我所做的更改在DataContract属性中。

最初是这样的:

[DataContract]

我把它改成这个:

[DataContract(Namespace="")]

它开始工作。。。

提示:当您运行web服务时,您可以在web服务的"/help"页面中看到POST请求示例。我从来没有注意过这一页。但它非常有用。当我将这个例子与Fiddler中的实际请求进行比较时,我发现名称空间是不同的D