【发布时间】:2018-12-25 17:19:56
【问题描述】:
我构建了一个简单的 Razor Pages 网站,以便在几个数据库表上显示一些视图。
在index.cshtml.cs我只有:
public class IndexModel : PageModel
{
public IActionResult OnGet()
{
return RedirectToPage("./Registrations/Index");
}
}
在Registrations/index.cshtml.cs我有:
public class IndexModel : PageModel
{
int pageSize = 30;
private readonly RegistrationAdmin.PostgresDbContext _context;
public IndexModel(RegistrationAdmin.PostgresDbContext context)
{
_context = context;
}
public PaginatedList<Registration> Registration { get; set; }
public async Task OnGetAsync(int pageIndex = 1)
{
IQueryable<Registration> registrations = _context.Registrations
.Include(r => r.ContactPerson)
.Include(r => r.Badge)
.OrderByDescending(r => r.RegistrationId);
this.Registration = await PaginatedList<Registration>.
CreateAsync(registrations.AsNoTracking(), pageIndex, pageSize);
}
}
从 Visual Studio 测试网站很好,从项目目录运行 dotnet run 也很好。
所以我部署了网站:
dotnet publish -o ../Published/ -c release
然后使用发布目录中的dotnet MyWebsite.dll 运行它。
当我连接到 http://localhost:5000 时,出现一般错误。
查看控制台这是抛出的异常:
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: No page named './Registrations/Index' matches the supplied values.
at Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor.ExecuteAsync(ActionContext context, RedirectToPageResult result)
at Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResultAsync(ActionContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
我不明白部署版本有什么问题。
【问题讨论】:
-
你为什么不给出行动的参考,像这样
return RedirectToAction("Index", "Registrations"); -
并确保在注册控制器中创建该操作
-
好的,我试试。但我不明白为什么它在部署前有效,而在部署后又无效。
-
您是否将视图与编译的源代码一起部署?
-
嗯,我不知道...我只是运行
publish命令,然后运行cd到目录,然后运行dotnet MyWebsite.dll。我是否必须从项目目录中手动复制一些文件才能发布?
标签: c# asp.net-core razor-pages