ฉันชอบความจริงที่ว่า MVC6 ของ ASP.NET Core ได้รวมสองรูปแบบเข้าด้วยกันเพราะฉันมักจะต้องการการสนับสนุนทั้งสองโลก ในขณะที่มันเป็นความจริงที่คุณสามารถปรับแต่ง MVC มาตรฐานใด ๆController
(และ / หรือพัฒนาActionResult
ชั้นเรียนของคุณเอง) เพื่อทำหน้าที่และประพฤติเหมือนApiController
มันอาจเป็นเรื่องยากมากที่จะรักษาและทดสอบ: นอกเหนือจากนั้นมีวิธีควบคุมกลับActionResult
ผสมกับผู้อื่น การส่งคืนข้อมูลดิบ / ต่อเนื่อง / IHttpActionResult
ข้อมูลอาจสร้างความสับสนอย่างมากจากมุมมองของนักพัฒนาโดยเฉพาะอย่างยิ่งหากคุณไม่ได้ทำงานคนเดียวและต้องทำให้นักพัฒนาซอฟต์แวร์รายอื่น ๆ
เทคนิคที่ดีที่สุดที่ฉันใช้มาจนถึงตอนนี้เพื่อลดปัญหาดังกล่าวในแอปพลิเคชันเว็บที่ไม่ใช่คอร์ ASP.NET คือการนำเข้า (และกำหนดค่าอย่างเหมาะสม) แพ็คเกจเว็บ API ลงในแอปพลิเคชันบนเว็บที่ใช้ MVC ดังนั้นฉันจึง โลก: Controllers
สำหรับ Views ApiControllers
สำหรับข้อมูล
ในการทำเช่นนั้นคุณต้องทำสิ่งต่อไปนี้:
- ติดตั้งแพคเกจดังต่อไปนี้ API เว็บโดยใช้ NuGet: และ
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
- เพิ่ม ApiControllers หนึ่งรายการขึ้นไปใน
/Controllers/
โฟลเดอร์ของคุณ
- เพิ่มไฟล์WebApiConfig.csต่อไปนี้ใน
/App_Config/
โฟลเดอร์ของคุณ:
using System.Web.Http;
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
ท้ายสุดคุณจะต้องลงทะเบียนคลาสข้างต้นในคลาสเริ่มต้นของคุณ( Startup.cs
หรือGlobal.asax.cs
ขึ้นอยู่กับว่าคุณใช้เทมเพลตการเริ่มต้น OWIN หรือไม่)
Startup.cs
public void Configuration(IAppBuilder app)
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
// ...
}
Global.asax.cs
protected void Application_Start()
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// ...
}
วิธีการนี้ - พร้อมกับข้อดีและข้อเสีย - อธิบายเพิ่มเติมในโพสต์นี้ที่ฉันเขียนไว้ในบล็อกของฉัน
ApiController
และController
ดังนั้นหากคุณกำลังใช้ใหม่ .NET คุณไม่จำเป็นต้องกังวลเกี่ยวกับ ApiController อีกต่อไป - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- api