Маршрут по умолчанию для ядра 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 (). Просто пустая страница. Что я пропустил?

Обновление:

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:

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


person Kovpaev Alexey    schedule 20.10.2016    source источник
comment
Проверьте мой ответ и скажите, помог ли вам!   -  person mybirthname    schedule 20.10.2016


Ответы (4)


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

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

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

person mybirthname    schedule 20.10.2016
comment
Ничего из этого мне не помогло. Я все еще обнаруживаю эту проблему. После некоторых изменений вся часть mvc перестала работать, и я могу получить только статические ресурсы, такие как файлы css и изображения. - person Kovpaev Alexey; 20.10.2016
comment
@KovpaevAlexey docs.asp.net/en/latest/fundamentals/routing.html проверьте этот URL. Это в значительной степени основы маршрутизации в ядре .NET. - person mybirthname; 20.10.2016
comment
Проблема возникает из-за исключения в службе, внедренной зависимостью в контроллер, и из-за того, что я забыл использовать страницу исключения разработчика, сайт только что вернул мне пустую страницу. Прошу прощения за неправильный вопрос, но в моем случае маршрутизация подходит. - person Kovpaev Alexey; 21.10.2016
comment
@KovpaevAlexey хорошо, что все работает, можете поставить вопрос на правильный, если хотите. - person mybirthname; 21.10.2016

Самым простым способом для меня (и без использования MVC) было установить для контроллера маршрут по умолчанию, используя пустой атрибут [Route ("")] custum следующим образом:

[ApiController]
[Route("")]
[Route("[controller]")]
public class MainController : ControllerBase
{ ... }

с помощью Startup.Configure

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});
person EladTal    schedule 01.04.2020

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

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

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

"buildOptions": {   "preserveCompilationContext": true }

в project.json

person sensei    schedule 10.05.2017

В классе 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

person Wedson Quintanilha da Silva    schedule 31.01.2019