ASP.NET Core'un MVC6'sının iki deseni bir araya getirdiği gerçeğini seviyorum, çünkü genellikle her iki dünyayı da desteklemem gerekiyor. Herhangi bir standart MVC'yi Controller
(ve / veya kendi ActionResult
sınıflarınızı geliştirmek ) tıpkı bir gibi davranıp davranmak için düzenleyebileceğiniz doğru ApiController
olsa da, korumak ve test etmek çok zor olabilir: bunun da ötesinde , Kontrolör yöntemlerinin ActionResult
başkalarıyla karıştırılması ham / serileştirilmiş / IHttpActionResult
veri döndürmek , özellikle yalnız çalışmıyorsanız ve diğer geliştiricileri bu hibrit yaklaşımla hızlandırmak için geliştirici bakış açısından çok kafa karıştırıcı olabilir.
ASP.NET Core olmayan web uygulamalarında bu sorunu en aza indirgemek için şimdiye kadarki en iyi teknik Web API paketini MVC tabanlı Web Uygulamasına aktarmak (ve düzgün bir şekilde yapılandırmak), böylece her ikisinin de en iyisini elde edebiliyorum dünyalar: Controllers
Görünümler ApiControllers
için, veri için.
Bunu yapmak için aşağıdakileri yapmanız gerekir:
- NuGet kullanarak aşağıdaki Web API paketlerini kurun:
Microsoft.AspNet.WebApi.Core
ve Microsoft.AspNet.WebApi.WebHost
.
- Klasörünüze bir veya daha fazla ApiController ekleyin
/Controllers/
.
- Aşağıdaki WebApiConfig.cs dosyasını
/App_Config/
klasörünüze ekleyin :
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 }
);
}
}
Son olarak, yukarıdaki sınıfı Başlangıç sınıfınıza kaydetmeniz gerekir (ya Startup.cs
da Global.asax.cs
, OWIN Başlangıç şablonunu kullanıp kullanmadığınıza bağlı olarak).
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);
// ...
}
Bu yaklaşım - artıları ve eksileri ile birlikte - bloguma yazdığım bu yazıda daha fazla açıklanıyor .
ApiController
veController
bu nedenle daha yeni .NET kullanıyorsanız artık ApiController için endişelenmenize gerek yok - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- api