2

POST 経由で次の JSON を送信しています。

POST http://localhost:52873/news 

{"text":"testing","isPublic":true}

私のコントローラー:

public class NewsController : Controller
{
    // GET: /<controller>/
    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Post(CreatePostCommand command)
    {
        /* ...more code... */
        return new HttpStatusCodeResult(200);
    }
}

コマンドは次のとおりです。

public class CreatePostCommand
{
    public string Text { get; set; }
    public bool IsPublic { get; set; }
}

私のルート設定は、VS 2014 CTP 4 の MVC テンプレートに付属するデフォルトです。

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default", 
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" });

    routes.MapRoute(
        name: "api",
        template: "{controller}/{id?}");
});

ASP.NET MVC 6 の概要からの引用:

このルート テンプレートを使用すると、アクション名が要求の HTTP 動詞にマップされます。たとえば、GET 要求は Get という名前のメソッドを呼び出し、PUT 要求は Put という名前のメソッドを呼び出します。{controller} 変数は引き続きコントローラー名にマップされます。

これは私にはうまくいかないようです。404 エラーが発生します。この新しい ModelBinder には何が欠けていますか? JSON POST メッセージをバインドしないのはなぜですか?

4

1 に答える 1

5

それは後に動作します

  • [HttpPost]属性の削除、および
  • [FromBody]属性タイプの前に属性を追加します。

修正されたコード:

// No HttPost attribute here!
public IActionResult Post([FromBody]CreatePostCommand command)
{
    /* ...more code... */
    return new HttpStatusCodeResult(200);
}
于 2014-10-14T21:44:24.210 に答える