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

时间:2017-08-23 08:28:04

标签: c# razor asp.net-core .net-core razor-pages

我不喜欢使用预先捆绑的AddMvc(),而是更喜欢使用AddMvcCore()

话虽如此,我想知道如何使用AddRazorPages()AddMvcCore()一起使用新的AddRazorPages()

例如,如果我们做了一个"裸骨"将中间件配置为仅使用official repository

中的// loaded the NuGet package Microsoft.AspNetCore.Mvc.RazorPages public void ConfigureServices(IServiceCollection services) { services.AddMvcCore() .AddRazorPages(); }
foo.cshtml

创建.\Pages\页面并将其放入\Foo目录后,当我导航到URL @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> 时,它返回404(找不到页面)。

即可。\页面\ Foo.cshtml

@model IEnumerable<TimeTrackerProjectV2.Models.TimesheetInfoAndTimeSheet_DetailsViewModel>

上面的示例页面取自Microsoft Documents: Introduction to Razor Pages in ASP.NET Core

  

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

2 个答案:

答案 0 :(得分:4)

事实证明有两个问题。

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

form1

(2)然后我抛出异常,迫使我必须包括public void Configure(IApplicationBuilder app, ... ) { app.UseMvc(); }

.AddAuthorization()

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

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

答案 1 :(得分:1)

看一下source code for AddMvc我们可以看到它在内部调用AddMvcCore,然后继续添加其他项目。所以,如果我是你,我会开始添加这些项目,直到你让Razor Pages工作,可能专注于Razor部分。例如:

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