2012-05-02 15 views
0

値として、私は次のように定義されたAC#のWebサービスがあります。JSON Webサービス - NULL

[WebInvoke(Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     RequestFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "BCryptLogin")] 
    LoginResponse BCryptLogin(LoginData logindata); 

をそして「logindata.loginにアクセスしようとすると、実際の機能は

public LoginResponse BCryptLogin(LoginData logindata) 
    { 
     string login = logindata.login; 
     string password = logindata.password; 

     // code be here 
    } 

です"私はNullReferenceExceptionを取得します:

System.NullReferenceException was unhandled by user code 
Message=Object reference not set to an instance of an object. 
Source=LoginService 
StackTrace: 
    at LoginService.LoginService.BCryptLogin(LoginData logindata) in C:\services\LoginService\LoginService\LoginService.svc.cs:line 74 
    at SyncInvokeBCryptLogin(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 

これは私のfですPOST Webサービスを最初に試してみると、私はかなり無知です:S何がうまくいかないのですか?

私のテスト要求は次のようになります。

{"login":"username","password":"password"} 

(も試してみました)

{"LoginData":{"login":"username","password":"password"}} 

そしてLoginDataオブジェクトは、次のように定義されています

[DataContract] 
public class LoginData 
{ 
    [DataMember] 
    public string login { get; set; } 
    [DataMember] 
    public string password { get; set; } 
} 
+0

74行目は何ですか? (LoginService.svc.cs:line 74)デバッガをアタッチし、nullを確認します。トレースを追加し、フィドラーを使用します。 – bryanmac

+0

'logindata'が' null'かどうか確認しましたか? – devstruck

+0

あなたのlogindataオブジェクトのようなサウンドはnullです。 – markp3rry

答えて

0

あなたの機能が期待されますオブジェクトですが、2つの値を渡します。

{"login":"username","password":"password"} 

JavaScriptでオブジェクトを作成して関数に渡す必要があります。

var LoginData = {}; 
LoginData.login = "username"; 
LoginData.password = "password"; 

次に、次の構文を使用して、このオブジェクトをJSONリクエストのメソッドに渡します。

var jsonRequest = {logindata: LoginData}; 

注:あなたの方法「logindata」のパラメータ名は、あなたのJSON呼び出しで同じでなければなりません、それは大文字と小文字を区別します。

JSON.org libを使用して、オブジェクトを有効なJSONリクエストに変換することをお勧めします。

JSON.stringify(jsonRequest); 
+0

JavaScriptを使用していない、現在はRESTClientで手作りしています。{"LoginData":{"login": "username"、 "password": "password"}}} 、影響はありません。LoginDataはnullのままです。 – vampireLady

+0

Gotcha、まだオブジェクトを渡す必要があります...あなたのメソッドが予期しているように、 "logindata"パラメータを渡さないでください。属性 "[DataContract]"が適用されました – Zachary

+0

LoginDataオブジェクトの正しい種類はJSONのように見えますか?LoginDataオブジェクトにはDataContract属性があり、正しく複写できませんでした:p – vampireLady

関連する問題