Wcf Rest Service GET方法无法显示JSON数据

时间:2017-12-06 03:18:09

标签: c# json rest wcf

我创建了wcf Rest Service以接受POST,GET和DELETE操作。向服务器发出GET请求时,它不会显示JSON数据并在Google Chrome中显示[]符号。

这是界面。

[OperationContract]
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/GetCustomers/{prefix}")]
string GetCustomers(string prefix);

这是实施。

public string GetCustomers(string prefix)
{

    List<object> customers = new List<object>();
    string sql = "SELECT * FROM Current_Account_Holder_Details WHERE Account_Holder_Last_Name LIKE @prefix + '%'";
    using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        using (SqlCommand cmd = new SqlCommand(sql))
        {
            cmd.Parameters.AddWithValue("@prefix", prefix);
            cmd.Connection = conn;
            conn.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    customers.Add(new
                    {
                        Tittle = sdr["Tittle"],
                        Account_Holder_First_Name = sdr["Account_Holder_First_Name"],
                        Account_Holder_Last_Name = sdr["Account_Holder_Last_Name"],
                        Account_Holder_DOB = sdr["Account_Holder_DOB"],
                        Account_Holder_House_No = sdr["Account_Holder_House_No"],
                        Account_Holder_Street_Name = sdr["Account_Holder_Street_Name"],
                        Account_Holder_Post_Code = sdr["Account_Holder_Post_Code"],    
                        Account_Holder_Occupation = sdr["Account_Holder_Occupation"],
                        Account_Number = sdr["Account_Number"] 
                     });
                 }
             }
             conn.Close();
         }    
         return (new JavaScriptSerializer().Serialize(customers));
     }
}

这是.SVC文件。

<%@ ServiceHost Language="C#" Debug="true" Service="HalifaxWCFProject.HalifaxService"%>

这是web.config文件。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DBCS" connectionString="Data Source=;Initial Catalog=HalifaxDatabase;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="HalifaxDatabaseEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=HalifaxDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.serviceModel>
    <services>
      <service name="HalifaxWCFProject.HalifaxService" behaviorConfiguration="mexBehaviour">
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="" behaviorConfiguration="REST" contract="HalifaxWCFProject.IHalifaxService" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="REST">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这是屏幕截图。 click here to see the result

1 个答案:

答案 0 :(得分:1)

我是这样做的。你也确定这个部分RequestFormat = WebMessageFormat.Json?

[OperationContract]
[WebInvoke(Method = "GET", 
           ResponseFormat = WebMessageFormat.Json, 
           BodyStyle = WebMessageBodyStyle.Wrapped, 
           UriTemplate = "register?serverCode={serverCode}")]
string Registration(string strVal);
public string Registration(string strVal)
{
    return "";
}

希望这有帮助。