aspnetcore 2

时间:2018-02-08 11:31:07

标签: asp.net-core asp.net-core-2.0

默认情况下,Razor Page应用程序转到Home / Index

有没有办法将其更改为Home / App?

在MVC中这很容易,但使用不同路由设置的Razor页面因此不适用MVC路由。

我认为它会出现在某个选项中,但我看不到它:

services.AddMvc()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AuthorizeFolder("/Account/Manage");
                options.Conventions.AuthorizePage("/Account/Logout");
                options. ??SetDefaultPage??
            });

我试过这个:

options.Conventions.AddPageRoute("/App", "");

但现在找到两条默认路由并生成错误:

  

AmbiguousActionException:匹配多个动作。以下操作匹配路由数据并满足所有约束:

     

页面:/ App

     

页面:/索引

可以通过从项目中删除Pages / Index.cshtml来解决此错误,但我也希望保留该页面。

5 个答案:

答案 0 :(得分:3)

很确定这是不可能的。文档说运行时控制搜索Index作为默认值。我无法找到当前版本中发生的情况,但IndexFileName是新内部PageRouteModelFactory类中static添加到即将发布的版本中:

private static readonly string IndexFileName = "Index" + RazorViewEngine.ViewExtension;

尽管如此,将配置属性添加到RazorPagesOptions似乎并不困难。 ASP.NET人员非常敏感,我打开一个请求作为GitHub问题并希望最好。

答案 1 :(得分:3)

在我的情况下,歧义是由项目中剩余的Pages/Index.cshtml引起的。 这可行:

  1. options.Conventions.AddPageRoute("/App", "");
  2. 删除或重命名Pages/Index.cshtml

答案 2 :(得分:1)

我使用Microsoft.AspNetCore.Rewrite解决了这个问题:

然后添加代码以替换默认的Index操作,在我的情况下使用Portfolio:

var options = new RewriteOptions()
    .AddRedirect("^", "portfolio"); // Replace default index page with portfolio

有关重写选项的更详细文章 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?tabs=aspnetcore2x

答案 3 :(得分:0)

如果只需要在Visual Studio中进行调试,则只需在“项目属性/调试/启动浏览器”下设置起始页即可。

答案 4 :(得分:0)

另一种方法是直接从Index OnGet方法重定向,如下所示:

    public class IndexModel : PageModel
    {
        public IActionResult OnGet()
        {
            return Redirect("/Welcome");
        }
    }

请注意,我已经更改了OnGet方法的返回类型。