2017-12-18 14 views
0

の成功またはエラーをスローしませんGET

[OperationContract] 
[WebGet(UriTemplate= "MemberSearch/{MemberName}", ResponseFormat=WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped)] 
string MemberSearch(string MemberName); 

ためWCF RESTfulなサービスの宣言で、以下の私は

public string MemberSearch(string MemberName) 
    { 
     string MemberId = string.Empty; 
     string strSqlConn = string.Empty; 

     SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCon"].ConnectionString); 
     sqlCon.Open(); 

     SqlCommand sqlCom = new SqlCommand("Select MemberId From Member Where MemberName Like '%" + MemberName + "%'"); 
     sqlCom.CommandType = System.Data.CommandType.Text; 
     sqlCom.Connection = sqlCon; 

     SqlDataReader rd = sqlCom.ExecuteReader(); 

     while (rd.Read()) 
     { 
      MemberId = Convert.ToString(rd["MemberId"]); 
     } 
     return MemberId; 
    } 

以下に作成したRESTfulなサービスです以下

MemberId MemberName 
1 John   
2 Mike   
3 Gracy  
4 Smith  

テーブル内のデータはAngularJS

で呼び出しコードであります
var app = angular.module("app", []); 
app.controller("main", function ($scope, $http) { 
var MemberName = "Jo"; 

$scope.keyword = ''; 

$scope.GetAllData = function() { 

    $http.get('http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/' + MemberName) 
     .success(function (data, status, headers, config) { 
      $scope.Details = data; 
     }) 
     .error(function (data, status, header, config) { 
      $scope.ResponseDetails = "Data: " + data + 
       "<br />status: " + status + 
       "<br />headers: " + jsonFilter(header) + 
       "<br />config: " + jsonFilter(config); 
     }); 
}; 
}); 

角度コードがいずれかのこの

の成功またはエラーに来ていないURLは場所を呼び出す

http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/ 

以下の通りである

http://localhost/Caller 

結果から次のようですWCF RESTfulサービスは以下の通りです

それはAngularJSコードで、成功またはエラーのいずれかを実行していない理由

EDIT

発呼場所として

<body ng-app="app"> 
<table id="tblContainer" ng-controller="main"> 
    <tr> 
     <td><input type="button" name="DisplayDetails" value="Display Details" ng-click="GetAllData()"></td> 
    </tr> 
    <tr> 
     <td> 
      <p ng-bind="ResponseDetails"></p> 
      {{ResponseDetails}} 
     </td> 
    </tr> 
</table> 

未満です。

+0

あなたが '$ scope.GetAllData()'をどこで呼んだかの証拠はありません。それを追加できますか?また、URLパスがWCF側から適切であるという証拠も見ることができません。 – Brian

+2

またAngularJSバージョン? '.success()'は1.6からは無効です:https://stackoverflow.com/questions/35329384/why-are-angular-http-success-error-methods-deprecated-removed-from-v1-6/ 35331339#35331339 – Brian

+0

あなたのコードはSQLインジェクション攻撃の影響を受けやすいです。パラメータ化されたクエリを使用する方法を調べてください。 –

答えて

1

あなたはこれまであなた$http機能を変更する必要があります。

$http.get('http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/' + MemberName) 
    .then(function(resp) { 
     $scope.Details = resp.data; 
    }, function(err) { 
     var data = err.data; 
     var status = err.status; 
     var header = err.header; 
     var config = err.config; 
     $scope.ResponseDetails = "Data: " + data + 
      "<br />status: " + status + 
      "<br />headers: " + jsonFilter(header) + 
      "<br />config: " + jsonFilter(config); 

    }); 

私の答えは、あなたのUIからこれを呼び出しているボタンやリンクを持っていることを前提としています。

私はまた、あなたがユーザー(ng-repeat)のリストを反復処理していることを推測していて、以下であるものにあなたの方法を変更し、次のように呼び出すことをお勧め:GetAllData(memberId)

$scope.GetAllData = function (memberId) { 
    $http.get('http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/' + memberId) 
    // abbreviated 
} 
+0

上記の答えで、私は 'then'を実行しています。それはオブジェクトを返すと、どのように私はそれをdeserializeすることができますか? –

+0

それは何が戻ってくるかによって異なります。JSONオブジェクトでなければなりません。もしそれが 'name'プロパティーを持っていれば、' resp.name'などとなります。 – Brian

関連する問題