Основной маршрут по умолчанию Asp.net

Упрощенный Startup код:

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseMvc(routes =>
    {
        routes.MapRoute(
        name: "default",
        template: "",
        defaults: new { controller = "Main", action = "Index" });
    });
}

После запуска приложения в Visual Studio 2015 я вижу в браузере "localhost: xxx", но я не вижу результата MainController.Index(). Просто пустая страница. Что я пропустил?

Update:

Web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>

Обновление 2:

Проблема возникает из-за исключения в зависимости от введенной службы для контроллера, и потому, что я забываю использовать сайт страницы исключения для разработчиков, просто вернул мне пустую страницу. Поэтому я сожалею о некорректном вопросе, но в моем случае маршрутизация прекрасна.

Ответ 1

routes.MapRoute(
    name: "default",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "Main", action = "Index" });

routes.MapRoute(
    name: "default",
    template: "{controller=Main}/{action=Index}/{id?}");

Это два способа определения маршрута по умолчанию. Вы смешиваете их. Вам нужно всегда определять шаблон.. Во втором случае вы можете писать значения по умолчанию непосредственно в шаблоне.

Ответ 2

В классе Startup.cs используйте удобный метод: UseMvcWithDefaultRoute():

public void Configure(IApplicationBuilder app, IHostingEnvironment 
{
   app.UseMvcWithDefaultRoute();
}

Может использоваться для изменения:


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

Дополнительная информация в документации Microsoft.

Ответ 3

Для всех вас, у кого пустой набор страниц PreserveCompilationContext для true:

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PreserveCompilationContext>true</PreserveCompilationContext>
  </PropertyGroup>

в csproj в версии 2017 или

"buildOptions": {   "preserveCompilationContext": true }

в project.json