默认情况下,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来解决此错误,但我也希望保留该页面。
答案 0 :(得分:3)
很确定这是不可能的。文档说运行时控制搜索Index
作为默认值。我无法找到当前版本中发生的情况,但IndexFileName
是新内部PageRouteModelFactory
类中static
添加到即将发布的版本中:
private static readonly string IndexFileName = "Index" + RazorViewEngine.ViewExtension;
尽管如此,将配置属性添加到RazorPagesOptions
似乎并不困难。 ASP.NET人员非常敏感,我打开一个请求作为GitHub问题并希望最好。
答案 1 :(得分:3)
在我的情况下,歧义是由项目中剩余的Pages/Index.cshtml
引起的。
这可行:
options.Conventions.AddPageRoute("/App", "");
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方法的返回类型。