无法获取ASP.Net控制器来处理JSON发布的数据



我使用的是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#对象,但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}]}

仍然没有正确处理任何值

看起来问题是contentType必须为="application/json;charset=UTF-8"我将服务从同一来源移动,并更改了contentType,它按预期工作。

将调查contentType更改导致Thinktecture 出现问题的原因

相关内容

  • 没有找到相关文章

最新更新