我希望你可以提供帮助,我尝试升级破损的登录系统,以便在转换登录凭据时使用POST代替GET。
它永远不会到达实际的方法,因此问题出现在界面和我的javascript之间。
界面:
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
UriTemplate = "/DoLogin")]
LoginKey DoLogin(string email, string password,string tenant);
使用Javascript:
$.ajax({
type: "POST",
url: "RestService.svc/DoLogin",
data:'{"email":"' + encodeURIComponent(email) + '","password":"' + encodeURIComponent(password) + '","tenant":"' + encodeURIComponent(tenant) + '"}',
dataType: "json",
cache: false,
success: function (loginKey) {
... rest of method
我发送的JSON数据有效: { “电子邮件”:“邮件”, “密码”:“somepassword”, “租客”:“tenantid” } 有什么想法在这里出错吗?它与GET一起工作得很好
ps这是实际登录休息服务方法的第一行:
public LoginKey DoLogin(string email, string password, string tenant)
{
答案 0 :(得分:2)
尝试设置内容类型,以防万一:
键入:“POST”,
url:“RestService.svc / DoLogin”,
数据:'{“email”:“'+ encodeURIComponent(email)+'”,“password”:“'+
dataType:“json”,
“contentType”:“application / json; charset = utf-8”,
...
除此之外,您的代码看起来是正确的,尽管我更喜欢不同的方法:
public class Credential
{
public string Email{get;set;}
public string Password {get;set;}
public string Tenant {get;set;}
}
在您的WCF方法中:
public LoginKey DoLogin(Credential theCredential)
在你的标记中:
var theCreadential = new Object();
theCreadential.Email = $('#txtEmail').val();
theCreadential.Password = $('#txtPassword').val();
theCreadential.Tenant = $('#txtTenant').val();
$.ajax({
type: "POST",
url: "RestService.svc/DoLogin",
data: "{'theCredential': " + JSON.stringify(theCredential) + "}",
dataType: "json",
cache: false,
success: function (loginKey) {
... rest of method
答案 1 :(得分:0)
我决定放弃整个restservice,而是将项目迁移到MVC3,MVC3处理这些场景变得更加简单和容易。
通过向ajax调用btw:
添加contentType来解决该问题 $.ajax({
type: "POST",
url: "restservice.svc/dologin",
data: JSON.stringify(json),
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function (result) {