web-dev-qa-db-ja.com

Web API POSTメソッドはHTTP / 1.1500内部サーバーエラーを返します

タイトルにあるように、Web APIのpostメソッドを使用すると、500の内部サーバーエラーが発生します。 Getメソッドは正常に機能し、POSTでエラーが発生します。

私はフィドラーを使用して投稿リクエストを送信しています:

応答ヘッダー: HTTP/1.1 500内部サーバーエラー

リクエストヘッダー:ユーザーエージェント:フィドラーホスト:localhost:45379コンテンツタイプ:application/jsonContent-Length:41 Content-Length:41

リクエスト本文: {"iduser" = "123456789"、 "username" = "orange"}

これがpostメソッドの私のコードです:

     // POST api/User
     public HttpResponseMessage Postuser(user user)
     {
        if (ModelState.IsValid)
        {
            db.users.Add(user);
            db.SaveChanges();

            HttpResponseMessage response =R  equest.CreateResponse(HttpStatusCode.Created, user);
            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.iduser }));
            return response;
       }
       else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }
    }

Sooooooo何がうまくいかなかったのでしょうか?なぜPOSTを許可しないのですか?

6
Obvious

投稿のデータは有効なJSONオブジェクトではありません。これは、モデルバインダーが期待しているものです(Content-Type:application/json)。

{"iduser"="123456789","username"="orange"}

=を:に置き換えてみて、どのように進むかを確認してください。あなたのコードは、リクエストのこれらの変更を使用して私のマシンで機能します。

POST http://localhost:20377/api/test/Postuser HTTP/1.1
Host: localhost:20377
Connection: keep-alive
Content-Length: 42
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Origin: chrome-extension://fhjcajmcbmldlhcimfajhfbgofnpcjmb
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,nb;q=0.4,de;q=0.2

{"iduser":"123456789","username":"orange"}
6
Francis