0

次の定義を持つ ac# Web サービスがあります。

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

そして実際の機能は

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

        // code be here
    }

「logindata.login」にアクセスしようとすると、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)

これは 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; }
}
4

1 に答える 1

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);
于 2012-05-02T15:36:19.937 に答える