1

ASP.NETMVCAPIでモデルを解析する際に問題が発生しました

これは私のAPIコントローラーです:

public class UserController : ApiController
{
    // Hent liste af personer
    public IEnumerable<UserModel> Get()
    {
        return new UserModel[] { new UserModel(), new UserModel() };
    }

    // Hente enkelt person
    public UserModel Get(int id)
    {
        return new UserModel();
    }

    // Opret person
    [ValidationActionFilter]
    public CreateUserRespose Post([FromBody]UserModel model)
    {
        CreateUserRespose rs = new CreateUserRespose();
        return rs;
    }

    // Rediger person
    public UserModel Put(int id, [FromBody]UserModel model)
    {
        return new UserModel();
    }

    // Slet person
    public UserModel Delete(int id)
    {
        return new UserModel();
    }
}

}

そしてUserModel:

public class UserModel
{
    [Required]
    [StringLength(500)]
    public String FristName { get; set; }
    [Required]
    [StringLength(500)]
    public String LastName { get; set; }
    [Required]
    [StringLength(250)]
    public String Email { get; set; }
    [Required]
    public String MatrikelId { get; set; }
}

Fiddlerを介して次の本文でPostコマンドを呼び出すと

FirstName=Fistname MiddleName&LastName=SomeName&Email=email@email.us&MatrikelId=1234

アクションPostは呼び出されますが、モデルはnullであり、ModelState.IsValidはtrueです。本文でデータを送信しない場合も、同じことが起こります。私はここで何が間違っているのですか?

更新:データをFiddlerではなくjsonとして送信しようとしました:

User-Agent: Fiddler
Host: localhost:51268
Content-Length: 102
Content-type: application/json

{"FristName":"Kasper asdasd","LastName":"asdasdasd","Email":"asdaasd@asdasd.us","MatrikelId":"132456asd"}

しかし、モデルがnullの場合、モデルの状態は無効であってはなりませんか?

4

1 に答える 1

3

ASP.NET Web API は、コンテンツ ネゴシエーションプロセスMediaTypeFormatterを使用して、要求の本文を逆シリアル化するためにどちらを使用するかを決定します。Accept典型的な POST リクエストでは、Content-Typeヘッダーをチェックします。何も存在しない場合は、リストの最初のものを使用MediaTypeFormatterします (デフォルトでは ですJsonMediaTypeFormatter)。

あなたの場合、Web API は適切なMediaTypeFormatter. Content-Typeの値を持つヘッダーをapplication/x-www-form-urlencodedリクエストに追加すると、問題が解決するはずです。

FormattersModel Binding、 ASP.NET Web API のコンテンツ ネゴシエーションに関する詳細な知識が必要な場合は、以下を読むことをお勧めします。

于 2013-03-04T10:43:08.057 に答える