ASP.NET Core 3.0中的.AddMvc()是什么?

3
我正在将一个ASP.NET Core 2.2 Web应用程序迁移到3.0版本,并对.AddMvc()有一个澄清问题。如果重要的话,我的应用程序使用Razor Pages和Views。
所以目前,在2.2代码中我有以下内容:
services.AddMvc()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
            })
           .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

迁移文档中说:“AddMvc继续像之前的版本一样运行。”但是,接下来它说以下代码“与2.2中的.AddMvc()相同”:

    services.AddControllers();
    services.AddRazorPages();

因此,我的问题是,我应该使用哪一个?
我的方法是做类似于:
    services.AddControllersWithViews();
    services.AddRazorPages()
            .AddRazorPagesOptions(options =>
             {
                 options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
              })
              .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

这是正确的方式吗?

谢谢!


2
AddMvc()实际上只是一个包装器,它包装了一堆其他注册服务的方法。这只是快速引导典型应用程序的一种方式。如果您想要排除某些内容或自定义如何注册内容,则可以使用单独的方法。请参见:https://github.com/aspnet/AspNetCore/blob/0303c9e90b5b48b309a78c2ec9911db1812e6bf3/src/Mvc/Mvc/src/MvcServiceCollectionExtensions.cs#L27 - Chris Pratt
1个回答

11

不,我相信您需要在.AddRazorPages()中设置Razor页面选项,就像这样:

services.AddControllersWithViews();
services.AddRazorPages(options => 
{
    options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});

我不确定是否需要使用.SetCompatibilityVersion(),但根据Intellisense,您可以将其挂在.AddControllersWithViews().AddRazorPages()调用下面任意一个。


1
好的,谢谢!那么,在ASP.NET Core 3.0中最好不要使用.AddMvc(),这是最佳实践吗? - deathcat05
1
根据迁移文档和新模板,就我所知,它似乎已经被取代了。 - jmoerdyk
你所拥有的看起来很不错。在其中一个服务上调用SetCompatibilityVersion与在两个服务上调用是相同的,这是一种幂等调用。实际上,.AddMvc()只是一个内部同时调用这两个方法的方法。因此,是否要调用它是一个观点问题,如果只调用其中一个,那么肯定不需要调用它。 - dove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接