Основной маршрут по умолчанию 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