Как установить маршруты в ядре asp.net для двух отдельных проектов в одном решении?

Я создал два проекта «asp.net core mvc», которые отлично работают по отдельности. У каждого есть своя маршрутизация в файле «startup.cs», когда я запускаю их, они работают хорошо.

Мой вопрос:

Как установить маршруты второго проекта из первого проекта? Где я должен измениться в первом проекте? Что добавить/написать?

Пример:

routes.MapRoute(
    name: "Default_1",
    url: "Project1/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = 
UrlParameter.Optional }
);

А также :

 routes.MapRoute(
     name: "Default_2",
     url: "Project2/{controller}/{action}/{id}",
     defaults: new { controller = "Home", action = "Index", id = 
 UrlParameter.Optional }
 );

Это изображение может помочь:

изображение

Мой вопрос похож на этот, но никто не ответил полностью: эта ссылка

Где находится файл RouteConfig.cs в ядре vs2017 .net?


person iDeveloper    schedule 23.06.2019    source источник
comment
Чтобы уточнить, вы пытаетесь перейти от одного приложения к другому?   -  person racamp101    schedule 23.06.2019
comment
@ racamp101 Именно это я и хочу сделать.   -  person iDeveloper    schedule 23.06.2019
comment
У меня есть старый проект в моем решении, который работает уже давно. Я хочу добавить еще один проект для выполнения Native Form в виде отдельного кода проекта и другой конфигурации и базы данных. Как установить маршруты из старого проекта для них обоих?   -  person iDeveloper    schedule 23.06.2019
comment
Возможно, они не должны быть отдельными приложениями, если вы хотите контролировать маршрутизацию в одном месте. Какую проблему вы надеетесь решить, разделив их?   -  person Matt Kocaj    schedule 23.06.2019
comment
это два отдельных приложения, маршрутизация такая же, как если бы второе приложение было с совершенно другого сайта. Теперь, если ваш вопрос расширяется до «Могу ли я поделиться логином и сортировкой», нам нужно больше ответов на вопросы. (это тот же домен, только поддомены?)   -  person racamp101    schedule 23.06.2019
comment
для вашего первого ответа я понял по ошибке, я не хочу переходить из одного приложения в другое, я хочу, чтобы каждое из них имело маршруты отдельно, но определяло их в старом проекте. Потому что, когда вы хотите использовать маршрутизацию, работает только проект, который установлен как запуск, а не другой.   -  person iDeveloper    schedule 23.06.2019
comment
@racamp101 это тот же домен   -  person iDeveloper    schedule 23.06.2019
comment
это трудный вопрос, чтобы ответить. технически, если все они совместимы, у вас может быть общий класс маршрутов, однако, если это не так, вам может потребоваться более одного места для объявления этих маршрутов. Не могли бы вы подробнее рассказать о конечном результате?   -  person racamp101    schedule 23.06.2019
comment
@tahaGhSa посмотри мой ответ, я думаю, я понял, о чем ты спрашиваешь, если это немного загадочно, если нужно.   -  person racamp101    schedule 23.06.2019
comment
Я новичок в этом виде развития Извините, если мои ответы не помогают. Старый проект — это веб-сайт и панель, и все, что мы делаем для наших клиентов, теперь мы хотим добавить в систему средство для создания форм, которое полностью отделимо, поэтому нет необходимости помещать его в старый проект как область, я не хочу помещать средство для создания форм. проект внутри старого проекта, но я хочу, чтобы он был доступен по URL-адресу, а контроллеры и методы должны быть доступны. Как это сделать? Возможно ли это каким-либо образом?   -  person iDeveloper    schedule 23.06.2019
comment
@tahaGhSa не нужно извиняться, просто пытаюсь понять, что все мы когда-то начинали все заново. мой ответ ниже вообще помогает? Если получится отлично! Если нет, пожалуйста, дайте мне знать, что еще вам нужно.   -  person racamp101    schedule 23.06.2019
comment
Давайте продолжим обсуждение в чате.   -  person iDeveloper    schedule 23.06.2019


Ответы (1)


Создайте метод расширения в общей библиотеке классов.

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Routing;

public static IRouteBuilder MapCommonRoutes(this IRouteBuilder routes, string projectRoute)
{
     routes.MapRoute(
          name: "default",
          template: "/" + projectRoute + "/{controller=Home}/{action=Index}/{id?}");

     // you can add more MapRoute...

     return routes;
 }

и используйте этот метод расширения в startup.cs

Для проекта 1

app.UseMvc(routes =>
{
    routes.MapCommonRoutes("Project1");
});

Для проекта 2

app.UseMvc(routes =>
{
    routes.MapCommonRoutes("Project2");
});
person Sinan Bozkuş    schedule 23.06.2019
comment
спасибо @sinan, как это работает для обоих проектов? какой startup.cs я должен использовать в первом или втором проекте? - person iDeveloper; 23.06.2019
comment
@tahaGhSa Я отредактировал ответ. Вы можете проверить еще раз. Вам нужно добавить этот метод для обоих проектов с параметром projectRoute. Если это решение вашей проблемы, пожалуйста, отметьте ответ. - person Sinan Bozkuş; 23.06.2019
comment
я должен поместить app.UseMvc... в startup.cs каждого проекта? - person iDeveloper; 23.06.2019
comment
какая польза от метода MapCommonRoutes? Я могу поместить его код внутри каждого app.UseMvc... - person iDeveloper; 23.06.2019
comment
да, вам нужно добавить startup.cs каждого проекта. MapCommonRoutes включает в себя ваши общие конфигурации маршрутов. Разве это не достаточно хорошо для вас? - person Sinan Bozkuş; 23.06.2019
comment
Bozkus Нет, я не думал, что смогу делать то, что хочу, таким образом. Как я понял, два проекта не должны работать параллельно друг с другом при старте по маршрутам. Я предпочитаю использовать Area. Пожалуйста, поправьте меня, если я ошибаюсь. - person iDeveloper; 24.06.2019