我正在使用asp.net 4.5并拥有以下控制器。
public class AccountController : Controller
{
//
// POST: /Account/JsonLogin
[System.Web.Mvc.AllowAnonymous]
[System.Web.Mvc.HttpPost]
public JsonResult Login(LogIndto loginRequest)
{
if ( loginRequest.Email == null )
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
return null;
}
}
这是我的dto
public class LogIndto
{
public String Email { get; set; }
public String Password { get; set; }
public Boolean RememberMe { get; set; }
}
基于fiddler,这是发布到我的服务的
POST host/Account/Login HTTP/1.1
Host: host
Connection: keep-alive
Content-Length: 71
Accept: application/json, text/javascript, */*; q=0.01
Origin: clientDifferentThanHost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer:clientdifferentThanHost/?
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
{"Email":"keith@kssoftware.net","Password":"afasdf","RememberMe":false}
我希望ASP.Net将JSON转换为C#Object,而loginRequest中的所有数据都为null(除了默认值为false的布尔值)
这是我正在使用的javascript
this.Login = function () {
var dto = JSON.stringify({Email:"test@test.com",Password:"avafa",RememberMe:false});
$.ajax({
url: app.homeUrl + "Account/Login",
data: dto,
success: self.loginSuccess,
processData: false,
type: "Post",
dataType: "json",
traditional: true
}).fail(self.loginFail)
;
};
当我尝试设置contentType:“application / json; charset = utf-8”时,请求永远不会进入服务。我假设这是我正在使用的Thinktecture.IdenityModel跨源包中的一个错误,但是一旦我能够使用它就会尝试解决这个问题。任何帮助将不胜感激。我已经让它在过去工作了,我确信我只需要第二眼帮助。
使用fiddler我也能够传递以下内容
Content-Type: application/json; charset=UTF-8
Referer: http://localhost:8900/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
{"loginRequest":[{"Email":"test@test.com","Password":"avafa","RememberMe":false}]}
仍未正确处理任何值
答案 0 :(得分:0)
看起来问题是contentType必须是=“application / json; charset = UTF-8”我将服务从同一个原点移动并更改了contentType并且它按预期工作。
将调查为什么contentType更改导致Thinktecture
出现问题