0

私は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; }
}

フィドラーに基づいて、これは私のサービスに投稿されているものです

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 クロスオリジン パッケージのバグだと思いますが、これを機能させることができたら、それを理解しようとします。どんな助けでも大歓迎です。私は過去にこれを機能させましたが、助けてくれるもう1つの目が必要だと確信しています.

フィドラーを使用して、次のものも渡すことができました

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}]}

まだ値が正しく処理されていません

4

1 に答える 1

0

問題は contentType が = "application/json; charset=UTF-8" でなければならないことだったようです サービスを同じオリジンから移動し、contentType を変更したところ、期待どおりに機能しました。

contentType の変更が Thinktecture で問題を引き起こしている理由を調査します

于 2013-07-15T16:18:57.553 に答える