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

Sve*_*vek 2 c# razor .net-core asp.net-core razor-pages

我不是使用预捆绑软件的忠实拥护者AddMvc()AddMvcCore()而是更喜欢使用捆绑软件。

话虽如此,我不知道如何去使用新的(如2.0)AddRazorPages()AddMvcCore()

例如,如果我们对中间件进行“裸露”配置以仅使用AddRazorPages()官方存储库中找到的中间件

// loaded the NuGet package Microsoft.AspNetCore.Mvc.RazorPages
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore()
        .AddRazorPages();
}
Run Code Online (Sandbox Code Playgroud)

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

。\ 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>
Run Code Online (Sandbox Code Playgroud)

上面的示例页面摘自Microsoft文档:ASP.NET Core中的Razor页面简介

有没有人知道这个,或者知道缺少什么?我在想路由问题。

Sve*_*vek 5

原来有两个问题。

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

public void Configure(IApplicationBuilder app, ... )
{
    app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)

(2)然后引发了异常,这迫使我不得不包括 .AddAuthorization()

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore()
        .AddAuthorization()
        .AddRazorPages();
}
Run Code Online (Sandbox Code Playgroud)

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

//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();
}
Run Code Online (Sandbox Code Playgroud)