Json Web 服务 - 空作为值
本文关键字:Web 服务 Json | 更新日期: 2023-09-27 18:33:00
我有一个具有以下定义的 c# 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 网络服务,我相当无知: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; }
}
您的函数需要一个对象,但您传递了两个值。
{"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);