我们有一个基于 .NET Core 5 构建的应用程序,有一个非常奇怪的问题。 95% 的 Web 应用程序运行完美,但有一个 Razor 页面会生成 404 - 但仅部署到生产服务器时。
在 Visual Studio 中,一切都按预期工作,但即使使用
dotnet MySite.dll
(该命令的 .exe
版本也不起作用 - 它表示 deps.json
文件中存在具有不同扩展名的重复引用,但针对的是.dll
版本达到了我的预期),在端口 5000/5001 上启动了一个“开发”Web 服务器,但即便如此在这一页上获取 404。所有其他页面(包括部分视图)均按预期工作。
页面上的代码非常基本,因为它是这样的部分视图设置:
@page "/providers/information"
@model ProviderInformationChangeRequestModel
@{
Layout = null;
}
页面上的其余内容只是 HTML - 它有一个表单、文本框和按钮,所以没有什么花哨的。剃刀页面后面的内容也很基本:
public async Task<IActionResult> OnGet()
{
//EntityModel is a public property exposed on our base `PageModel` class (ours extends the Microsoft one)
this.EntityModel = new ProviderChangeModel();
//this is an API call - we use this exact call all over the site, so presumably it isn't failing, since it works everywhere else
var entity = await this.GetFromJsonAsync<ProviderUserModel>("/user/me");
this.EntityModel.ProviderUserId = entity.Id;
this.EntityModel.ProviderId = entity.ProviderId.Value;
return Page();
}
我们使用这种类型的结构的所有其他部分视图都可以工作——无论是部署的还是通过 VS 的——只有这一页不起作用。我读过,当 Razor 页面进行后端 API 调用(如果其中一个调用返回 404)时,有时会发生这种情况,但它所做的唯一调用是我们在整个网站中使用的调用,因此不可能是这样。
有人有任何想法可以为我们指明正确的方向吗?如果它在 VS 中失败,很容易追踪,但由于它只是部署的版本(我已重新部署多次,重新启动相应的应用程序池等),我不知所措。
.cshtml 页面上的
Build Type
设置为 None
而不是 Content
- 它在 VS 中的工作原理我不确定我是否理解,但至少现在已经解决了。