2017-07-12 15 views
0

jsonを含むHTTP投稿を受け取るWebアプリケーションを作成しようとしています。私が今したいのは、私が要求を受け取ることができるということだけです。私は、Web APIテンプレートを使用してASP .NET Webアプリケーションを作成することから始めました。私は記事を受け取るために、コントローラを追加しました:ASP .NET Webhook Receiver

public class PostmanController : Controller 
{ 

    [System.Web.Mvc.HttpPost] 
    public void Index([FromBody] string request) 
    { 

     // Create handler class object 
     PostmanHandler test = new PostmanHandler(); 

     // Pass request to the convertjsontoobject method 
     test.ConvertJsonToObject(request); 

    } 
} 

あなたがここに見ることができるように、私はまた、モデルフォルダ内のハンドラを作成しました:

私が作ったクラスにJSONに変換
public class PostmanHandler 
{ 
public void ConvertJsonToObject(string s) 
    { 
     // Deserialize JSON 
     var newData = JsonConvert.DeserializeObject<testobject>(s); 
    } 
} 

public class testobject 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

これをテストして、動作しているかどうかを確認しようとしていますが、POSTリクエストを送信するときにPostmanから404応答が返されます。私はhttp://localhost:xxxx/api/Postmanに送っています。これは、次のようなWebApiConfigファイルのルーティングに従っていると考えています:routeTemplate: "api/{controller}/{id}"

何らかのルーティングを外していますか?

答えて

0

実際にWeb API(MVCではなく)を使用している場合、コントローラはApiController(コントローラではない)のサブクラスである必要があります。

アップデート:JSONの逆シリアル化を自分で処理する必要はありません。 Web APIがそれを行います。あなたの「要求」のパラメータがタイプ「文字列」とすべきではない、それは実際にあなたがあなたのURLでAPIを取り出し、http://localhost:xxxx/Postmanを試してみてください

[HttpPost] 
public void PostObject([FromBody]testobject request) 
{ 

    // Your request object should be deserialized already. 
} 
+1

ありがとうございました!今jsonをデシリアライズする際にnull値の例外を取得する –

+0

問題ありません。私はちょうど私の答えを更新しました –

+1

ああ、それはそれを解決しました。助けてくれてありがとう! –

0

にデシリアライズしようとしているタイプのものでなければなりません。あなたのコントローラPostmanControllerはWeb API(コントローラではなくApiControllerクラスから派生)であるため、/ api/{controller}/{id}のルーティングテンプレートはこの場合正しくありません。

+0

ありがとうございます。今では、 "var newData = JsonConvert.DeserializeObject (s);"のハンドラで例外が発生しています。その値をnullにすることはできません。 –

+0

フォームPOSTに生データを含めることはできますか? {"request":{"id": "1"、 "name": "john smith"}}そうでない場合は、リクエストパラメータでnullが返され、今説明したエラーが発生します。 – kots