C# 使用AddMvcCore()而不是AddMvc()的ASP.NET Core 2.0 Razor页面

C# 使用AddMvcCore()而不是AddMvc()的ASP.NET Core 2.0 Razor页面,c#,razor,asp.net-core,.net-core,razor-pages,C#,Razor,Asp.net Core,.net Core,Razor Pages,我不太喜欢使用预绑定的AddMvc(),我更喜欢使用AddMvcCore() 话虽如此,我想知道如何使用新的(从2.0开始)AddRazorPages()和AddMvcCore() 例如,如果我们对中间件进行“基本”配置,只使用从 在我创建了一个foo.cshtml页面并将其放入\Pages\目录后,当我导航到URL\foo时,它将返回一个404(未找到页面) \Pages\Foo.cshtml @page @model IndexModel @using Microsoft.AspNetCor

我不太喜欢使用预绑定的
AddMvc()
,我更喜欢使用
AddMvcCore()

话虽如此,我想知道如何使用新的(从2.0开始)
AddRazorPages()
AddMvcCore()

例如,如果我们对中间件进行“基本”配置,只使用从

在我创建了一个
foo.cshtml
页面并将其放入
\Pages\
目录后,当我导航到URL
\foo
时,它将返回一个404(未找到页面)

\Pages\Foo.cshtml

@page
@model IndexModel
@using Microsoft.AspNetCore.Mvc.RazorPages

@functions {
    public class IndexModel : PageModel
    {
        public string Message { get; private set; } = "In page model: ";

        public void OnGet()
        {
            Message += $" Server seconds  { DateTime.Now.Second.ToString() }";
        }
    }
}

<h2>Hello World</h2>
<p>
    @Model.Message
</p>
@page
@模型索引模型
@使用Microsoft.AspNetCore.Mvc.RazorPages
@功能{
公共类索引模型:PageModel
{
公共字符串消息{get;private set;}=“在页面模型:”;
公共互联网
{
Message+=$“服务器秒数{DateTime.Now.Second.ToString()}”;
}
}
}
你好,世界

@模型消息

上面的示例页面取自

有没有人知道这件事,或者知道遗漏了什么?我在想路线有问题

查看,我们可以看到它在内部调用
AddMvcCore
,然后继续添加其他项。因此,如果我是你,我会开始添加这些项目,直到你的剃须刀页面开始工作,可能重点放在剃须刀部件上。例如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore()
        .AddViews()
        .AddRazorViewEngine()
        .AddRazorPages();
}

结果有两个问题

(1) 我需要运行MVC中间件(duh!)

(2) 然后抛出了一个异常,这迫使我必须包含
.AddAuthorization()

在这里,它被超级简化为一个简单的控制台应用程序:

//using System.IO;
//using Microsoft.AspNetCore.Builder;
//using Microsoft.AspNetCore.Hosting;
//using Microsoft.Extensions.DependencyInjection;

public static void Main(string[] args)
{
    IWebHost host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .ConfigureServices(services =>
        {
            services.AddMvcCore()
                .AddAuthorization()
                .AddRazorPages();
        })
        .Configure(app =>
        {
            //app.UseExceptionHandler("/error");
            app.UseStaticFiles();
            app.UseMvc();
        })
        .Build();

    host.Run();
}

我不认为
AddMvcCore
添加了任何剃须刀的东西,所以你需要手动添加。你的意思是我需要
.AddRazorViewEngine()
.AddViews()
,等等?不确定剃须刀需要什么(还没有机会玩它)但我会开始添加项目,直到它按预期工作。这似乎不会改变任何事情。这就好像这些路由没有到达它们应该去的地方……您是否经过并添加了
AddMvcCore
没有添加的所有位?如果我按照这个答案中的描述运行mvccore+addrazorpages,我仍然会得到错误CS0234:类型或名称空间名称“Mvc”在名称空间“Microsoft.AspNetCore”错误中不存在。
public void Configure(IApplicationBuilder app, ... )
{
    app.UseMvc();
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore()
        .AddAuthorization()
        .AddRazorPages();
}
//using System.IO;
//using Microsoft.AspNetCore.Builder;
//using Microsoft.AspNetCore.Hosting;
//using Microsoft.Extensions.DependencyInjection;

public static void Main(string[] args)
{
    IWebHost host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .ConfigureServices(services =>
        {
            services.AddMvcCore()
                .AddAuthorization()
                .AddRazorPages();
        })
        .Configure(app =>
        {
            //app.UseExceptionHandler("/error");
            app.UseStaticFiles();
            app.UseMvc();
        })
        .Build();

    host.Run();
}