2

Я создаю веб-приложение в ASP.NET 5 с помощью Visual Studio 2015. Я создал решение с уровнями доступа к данным, бизнесу, услугам и пользовательскому интерфейсу. Я ссылался на Службы на уровне пользовательского интерфейса. Поскольку в MVC 6 оба Web API и MVC попадают под один и тот же шаблон проекта, необходимо иметь два разных уровня для сервисов и UI или того же проекта с разными контроллерами.Веб-приложение в ASP.NET 5

А также в проекте UI я раскомментировали следующие строки в Startup.cs

services.AddWebApiConventions(); 
routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}"); 

Во время работы проекта, домашняя страница приходит нормально, но когда я нажимаю на ссылки в домашней странице URL-адрес подобные изменения

http://localhost:45075/api/Home 

И это дает ошибочную страницу говорят, что

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied. 
Sample.Services.Controllers.HomeController.Index 
Sample.Services.Controllers.HomeController.About 
Sample.Services.Controllers.HomeController.Contact 
Sample.Services.Controllers.HomeController.Error 

Мои понимание того, что с тех пор я включил соглашения Web API, это будет домашний контроллер услуг, который имеет атрибут маршрута

[Route("api/[controller]")] 

Если это так, как разрешить этот конфликт, указав пространство имен или некоторые ограничения при визуализации представлений в маршрутах.

Я новичок. Поправьте меня, если я ошибаюсь.

+2

Пожалуйста, постарайтесь задать один вопрос за сообщение, это облегчает предоставление полезных ответов. При этом вам нужно использовать соглашения или явное сопоставление, а не то, и другое. – Claies

ответ

2

На MVC 6 вы можете иметь API RESTful, пока Views в том же проекте и даже на одном контроллере.

Один способов настроить маршрутизацию для вашего приложения, чтобы создать карту на Startup.cs, как это, с IApplicationBuilder:

Use IApplicationBuilder app

Затем вы можете задать маршруты для каждого действия:

Setting route for an Action

Установив [HttpGet] (или любой другой HTTP-глагол) на действие без параметров, он создаст маршрут по соглашению, followi ng имя вашего действия. Таким образом, вы можете решить многие конфликты. Также можно поместить несколько действий одного и того же HTTP-глагола на один контроллер.

И как указано выше, пожалуйста, задайте только один вопрос за сообщение.