Web API コントローラーは、MVC コントローラーと同じ意味で「アクション」を使用しません。[HttpPost]
Web API コントローラーも実際には,[HttpGet]
属性を使用しません。ApiControllers 内のメソッドの名前に基づいてリクエストをディスパッチします。MVC とは似ていますが、起動して実行するのが難しい場合があるため、MVC との Web API の違いについてもう少し読むことをお勧めします...
テスト用に作成した Web API のかなり一般的な例を次に示します。.NET WPF アプリから投稿していたため、この API に投稿する JavaScript がありません。「/Important/Post」ではなく「/Important」に投稿します。うまくいけば、これで正しい軌道に乗ることができます...
WebAPIConfig.cs (ルート):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace ArrayTest.WebAPI
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
API コントローラー:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using ArrayTest.Models;
using System.Threading;
namespace ArrayTest.WebAPI.Controllers
{
public class ImportantController : ApiController
{
// POST api/important
public HttpResponseMessage Post(ImportantList values)
{
//manipulate values received from client
for (int i = 0; i < values.ImportantIDs.Count; i++)
{
values.ImportantIDs[i] = values.ImportantIDs[i] * 2;
}
//perhaps save to database, send emails, etc... here.
Thread.Sleep(5000); //simulate important work
//in my case I am changing values and sending the values back here.
return Request.CreateResponse(HttpStatusCode.Created, values);
}
}
}
モデル:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArrayTest.Models
{
public class ImportantList
{
public List<int> ImportantIDs { get; set; }
}
}