Маршрутизация ASP .Net Core MVC не работает в Visual Studio 2017 после изменения «applicationUrl» - PullRequest
0 голосов
/ 29 июня 2018

Я создал пустое основное веб-приложение ASP.NET и добавил службу и конфигурацию MVC в файл «Startup.cs»

И чтобы настроить мой вид при запуске «Пользователи / Создать», я изменил «applicationUrl» в файле launchSettings.json следующим образом:

"applicationUrl": "http://localhost:61541/Users/Create",

Первый выпуск

Я получил ожидаемый URL при запуске visual studio "http://localhost:61541/Users/Create", но он показывает мне представление" Главная / индекс "(маршрут по умолчанию)

Решение

Теперь я понял, что не должен менять значение «applicationUrl», так как MVC считает его основным корнем. Вот почему я получил следующее поведение

Основной выпуск

Когда я решил изменить "applicationUrl" обратно на "http://localhost:61541" и перейти к" http://localhost:61541/Users/Create",, я снова получил представление "Home / index" (маршрут по умолчанию)

Также я получил следующее поведение:

Примечание. После развертывания решения в IIS все работает, как и ожидалось. Но в Visual Studio поведение все еще странное для меня

Мой вопрос

Я спрашиваю, почему маршрутизация внутри Visual Studio (с IIS express) не работает, как раньше? хотя я изменил «applicationUrl» обратно на его первоначальное значение?!

Вот код решения

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Затем я добавил два контроллера с двумя представлениями для каждого

 public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Create()
    {
        return View();
    }
}

public class UsersController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Create()
    {
        return View();
    }
}

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Похоже, что каждый раз, когда вы вносите изменение в URL приложения в Visual Studio, оно записывает в [каталог проекта] .vs \ config \ applicationhost.config. Он добавляет новый узел «application» под узлом «site». В моем случае это было / users и затем / web, согласно вашей рекомендации. Он просто продолжает добавлять новые пути приложений с узлами «virtualDirectory», имеющими path = «/». Он не удаляет ни одного из них. Каждый новый путь «приложения» будет работать. Однако, если указанный вами путь является контроллером, это сбивает с толку.

Из пользовательского интерфейса VS кажется разумным предположить, что при изменении URL-адреса приложения вы меняете одно значение, а не добавляете его в список допустимых значений.

В любом случае, если вы отредактируете applicationhost.config, чтобы удалить ненужные «приложения» на вашем сайте, оно должно работать как прежде.

0 голосов
/ 29 июня 2018

Единственный обходной путь, который у меня сейчас есть, - добавить суффикс к "applicationUrl" будет "http://localhost:61541/web", поэтому я могу иметь исправлена ​​маршрутизация в Visual Studio.

Вот результаты

Примечание: это решение может вызвать проблемы с отладкой вызовов Ajax. Это означает, что вы не сможете отлаживать Ajax-вызовы на стороне сервера. Но чтобы избежать этой проблемы, вы можете запустить Ajax Url с суффиксом вроде '/web/...'

...