Я люблю то, что MVC6 ASP.NET сердечника слили две модели в один, потому что я часто нужно поддерживать как миры.Хотя верно, что вы можете настроить любой стандартный MVC Controller
(и/или разработать свои собственные классы ActionResult
), чтобы действовать & ведут себя точно так же, как ApiController
, его может быть очень сложно поддерживать и тестировать: кроме того, имея Контроллеры методы, возвращающие ActionResult
, смешанные с другими, возвращающими исходные данные/сериализованные данные/IHttpActionResult
, могут быть очень запутанными с точки зрения разработчика, особенно если вы не работаете в одиночку и должны заставить других разработчиков ускорить этот гибридный подход.
Лучшая методика, с которой я пришел до сих пор, чтобы свести к минимуму эту проблему в непрофильных веб-приложениях ASP.NET, заключается в том, чтобы импортировать (и правильно настроить) пакет веб-API в веб-приложение на основе MVC, поэтому я могу лучшее из обоих миров: Controllers
для просмотров, ApiControllers
для данных.
Для того, чтобы сделать это, вам нужно сделать следующее:
- Установите следующие пакеты Web 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 класса (либо 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);
// ...
}
Этот подход - вместе с его преимущества и недостатки - далее объяснено в the following post.
Важно: ASPNET Core «объединил» «ApiController» и «Controller», поэтому, если вы используете новый .NET, вам больше не нужно беспокоиться о ApiController - https://docs.microsoft.com/en -us/aspnet/core/tutorials/first-web-api –
Рад, что они сделали! Я предсказывал это долго назад http://prideparrot.com/blog/archive/2012/10/asp_net_mvc_vs_webapi – VJAI