2017-12-08 7 views
1

Wcf Rest ServiceをAngular JSアプリケーションに使用しています。私は入力フィールドに口座番号に基づいて単一のレコードを表示しようとしています。しかし、送信ボタンをクリックしてレコードを表示すると、Google Chrome Network Tapでエラーが発生します。Wcf Restサービス戻り値変換エラー

サーバーで要求の処理中にエラーが発生しました。例外メッセージは 'nvarchar値' {Account_Number} 15 'をデータ型intに変換すると変換に失敗しました。'詳細はサーバーログを参照してください。例外スタックトレースは次のとおりです。

そして、ポストメソッド操作で400の不正リクエストが返されます。

ここにインターフェイスがあります。

[OperationContract] 
     [WebInvoke(Method = "POST", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "/GetAccountDetails/{Account_Number}")] 
     string GetAccountDetails(string Account_Number); 

ここに実装があります。

public string GetAccountDetails(string Account_Number) 
     { 
      List<object> customers = new List<object>(); 
      string sql = "SELECT * FROM Current_Account_Holder_Details WHERE Account_Number = @Account_Number"; 
      using (SqlConnection conn = new SqlConnection()) 
      { 
       conn.ConnectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 
       using (SqlCommand cmd = new SqlCommand(sql)) 
       { 
        cmd.Parameters.AddWithValue("@Account_Number", Account_Number); 
        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)); 
      } 

     } 

ここにスクリプトコードがあります。

var app = angular.module("WebClientModule", []) 
    .controller('Web_Client_Controller', ["$scope", 'myService', function ($scope, myService) { 
     var Account_Number = $scope.Account_Number; 
     $scope.search = function (Account_Number) { 
      var promisePostSingle = myService.postbyId(Account_Number); 

     promisePostSingle.then(function (pl) { 
      var res = pl.data; 
      $scope.Account_Number = res.Account_Number; 
      $scope.Account_Creation_Date = res.Account_Creation_Date; 
      $scope.Account_Type = res.Account_Type; 
      $scope.Branch_Sort_Code = res.Branch_Sort_Code; 
      $scope.Account_Fees = res.Account_Fees; 
      $scope.Account_Balance = res.Account_Balance; 
      $scope.Over_Draft_Limit = res.Over_Draft_Limit; 

      // $scope.IsNewRecord = 0; 
     }, 
      function (errorPl) { 
       console.log('failure loading Employee', errorPl); 
      }); 
    } 
    }]); 




app.service("myService", function ($http) { 

    this.postbyId = function (Id) { 
     return $http.post("http://localhost:52098/HalifaxIISService.svc/GetAccountDetails/{Account_Number}" + Id); 
    }; 
    }) 

ここにHTMLがあります。

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html ng-app="WebClientModule"> 
<head> 
    <meta name="viewport" content="width=device-width" /> 

    <title>AccountBalance</title> 
    <script src="~/Scripts/angular.min.js"></script> 

    <script src="~/RegistrationScript/AccountBalance.js"></script> 
</head> 
<body> 
    <div data-ng-controller="Web_Client_Controller"> 
     Enter Account_Number: <input type="text" ng-model="Account_Number" /> 
     <input type="button" value="search" ng-click="search(Account_Number)" /> 

      <table id="tblContainer"> 
       <tr> 
        <td> 
         <table style="border: solid 2px Green; padding: 5px;"> 
          <tr style="height: 30px; background-color: skyblue; color: maroon;"> 
           <th></th> 
           <th>Account Number</th> 
           <th>Account Creation Date</th> 
           <th>Account Type</th> 
           <th>Branch Sort Code</th> 
           <th>Account Fees</th> 
           <th>Account Balance</th> 
           <th>Over Draft Limit</th> 

           <th></th> 
           <th></th> 
          </tr> 
          <tbody data-ng-repeat="user in Users"> 
           <tr> 
            <td></td> 
            <td><span>{{user.Account_Number}}</span></td> 
            <td><span>{{user.Account_Creation_Date}}</span></td> 
            <td><span>{{user.Account_Type}}</span></td> 
            <td><span>{{user.Branch_Sort_Code}}</span></td> 

            <td><span>{{user.Account_Fees}}</span></td> 
            <td><span>{{user.Account_Balance}}</span></td> 
            <td><span>{{user.Over_Draft_Limit}}</span></td> 
            <td> 

           </tr> 
          </tbody> 
         </table> 
        </td> 
       </tr> 
       <tr> 
        <td></td> 
       </tr> 
       <tr> 
        <td> 

         <div style="color: red;">{{Message}}</div> 

        </td> 
       </tr> 
      </table> 
     </div> 
     </body> 


</html> 

ここでは、Wcf Serviceのデバッグモードのスクリーンショットがあります。 enter image description here

ここはGoogle Chrome Console Windowsの結果です。 enter image description here

+0

あなたの '$ http.post'には1つのパラメータ(データなしのurl)がありますが、' $ http.get'ではなく、 –

+0

URLにはすでにパラメータが記載されています – Mohammad

+0

スクリプトファイルのコード – Mohammad

答えて

1

変更する必要があります。

$http.post("http://localhost:52098/HalifaxIISService.svc/GetAccountDetails/{Account_Number}" + Id); 

$http.post("http://localhost:52098/HalifaxIISService.svc/GetAccountDetails?Account_Number=" + Id); 

にあなたは{Account_Number}15としてパラメータを送信しています。それは15でなければなりません。

+0

ありがとうございました。 – Mohammad

+0

インターフェイスを変更する必要があります – Mohammad

+0

POSTをGETに変更する方が良いでしょう。すでにエンドポイントに何も投稿していないからです。 – lucky

関連する問題