web-dev-qa-db-ja.com

メソッド 'UseRouting'のオーバーロードは1つの引数を取らない

ASP.NET Core 3 Preview 5に更新しました。ソリューションを開いてビルドしようとすると、次のURLのConfigure()のStartup.csファイルに「メソッド 'UseRouting'のオーバーロードが引数を1つ受けません」というエラーがスローされます。次のコード:

    app.UseRouting(routes => {
        routes.MapControllerRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRazorPages();
    });

私はマイクロソフトのドキュメントに関するいくつかのドキュメントを読んで、上記のコードを次のコードに置き換えようとしました:

    app.UseEndpoints(endpoints => {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
    });

ただし、ビルド時に次のコンテキストでSystem.InvalidOperationExceptionをスローします。

'EndpointRoutingMiddlewareは、EndpointMiddlewareによって設定されたエンドポイントと一致するため、EndpointMiddlewareの前にリクエスト実行パイプラインに追加する必要があります。アプリケーションスタートアップコードの「Configure(...)」の呼び出し内で「IApplicationBuilder.UseRouting」を呼び出して、EndpointRoutingMiddlewareを追加してください。

ConfigureServicesメソッドの次の行を置き換えてみました。

    services.AddMvc()
        .AddNewtonsoftJson();

幅:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();

これでエラーは発生しなくなりましたが、読み込みが完了するとページが空白になります。この問題の解決を手伝ってくれる人はいますか?

私のソリューションでは、次のパッケージを使用します。

 <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.0.0-preview5-19227-01" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0-preview5-19227-01" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.0.0-preview5-19227-01" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0-preview5-19227-01" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview5.19227.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview5.19227.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview5.19227.9" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />

私のソリューションのTargetFrameworkはnetcoreapp3.0です

10
Mitch

エラーメッセージをもう一度引用するには:

EndpointRoutingMiddlewareEndpointMiddlewareによって設定されたエンドポイントに一致するため、EndpointMiddlewareの前にリクエスト実行パイプラインに追加する必要があります。アプリケーションのスタートアップコードの 'Configure(...)'の呼び出し内で '_IApplicationBuilder.UseRouting_'を呼び出してEndpointRoutingMiddlewareを追加してください。

ASP.NET Core 3は、洗練されたエンドポイントルーティングを使用します。これにより、通常、アプリケーション内のルーティングに関する制御が強化されます。エンドポイントルーティングは、次の2つのステップで機能します。

  • 最初のステップでは、要求されたルートが構成されたルートと再度照合され、アクセスされているルートがわかります。
  • 最終ステップでは、決定されたルートが評価され、それぞれのミドルウェア、たとえばMVCが呼び出されます。

これらは、他のミドルウェアがそれらのポイント間で動作できるようにする2つの別個のステップです。これにより、これらのミドルウェアはエンドポイントルーティングからの情報を利用できます。実際のhandler(MVCなど)の一部として実行する必要なく、認証を処理します。

2つのステップは、app.UseRouting()およびapp.UseEndpoints()によってセットアップされます。前者は、ルートを決定するロジックを実行するミドルウェアを登録します。その後、後者はそのルートを実行します。

EndpointRoutingMiddlewareEndpointMiddlewareのやや紛らわしい使い方の間でエラーメッセージを注意深く読むと、Configureの中にUseRouting()を追加するように指示されます方法。つまり、基本的に、エンドポイントルーティングの最初のステップを呼び出すのを忘れていました。

したがって、Configureは(たとえば)次のようになります。

_app.UseRouting();

app.UseAuthentication();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapRazorPages();
});
_

3.0へのルーティングの移行は .0の移行ガイド にも記載されています。

21
poke

掘り下げた後、私はこの問題の解決策を見つけました。 dotnetコア3.0には追加のアクションが必要なので、これを機能させるために何をしたかを説明します。 ConfigureServices()メソッド(Startup.cs内)で最初に削除:

_services.AddMvc().AddNewtonsoftJson();
_

このメソッドの上部(services.Configure <>の下)に次の行を追加します。

_    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();
_

次に、Configure()メソッドで、app.UseRouting()app.UseAuthentication()の前にapp.UseAuthorization();を追加し、このメソッドの下部に置き換えます

_    app.UseRouting(routes => {
        routes.MapControllerRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRazorPages();
    });
_

幅:

_    app.UseEndpoints(endpoints => {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
    });
_
1
Mitch