web-dev-qa-db-ja.com

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:

問題は、コントローラーに依存性を注入したサービスの例外に起因します。開発者の例外ページサイトを使用するのを忘れたため、空白のページが返されました。間違った質問で申し訳ありませんが、私の場合はルーティングは問題ありません。

15
Kovpaev Alexey
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つの方法です。あなたはそれらを混ぜています。 テンプレートを常に定義する必要があります。 2番目の方法では、テンプレートに直接デフォルトを書き込むことができます。

11
mybirthname

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ドキュメント

空白のページを取得するすべてのユーザーに対して、PreserveCompilationContextをtrueに設定します。

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

vs 2017のcsprojまたは

"buildOptions": {   "preserveCompilationContext": true }

project.jsonで

0
sensei