将我的应用迁移到ASP.NET Core 3.0后,先前有效的索引URL返回404

一个应用程序始于ASP.NET Core 2.0(我认为),然后迁移到2.1,然后迁移到2.2,现在我正在尝试并且无法将其迁移到3.0 ...

我阅读并尝试应用official migration docs中的说明,据此,我应该(除其他外)将services.AddMvc()替换为services.AddRazorPages(),将app.UseMvc()替换为{{ 1}}(如果我使用的是Razor Pages)。据我所知,我一直在使用Razor Pages,而从未使用过完整的MVC,所以我就是这样做的。

现在,以前可用的URL返回HTTP 404而不是任何内容...

例如,app.UseEndpoints(endpoints => {endpoints.MapRazorPages();})/路由可以做到这一点,即使在项目目录中既有/Index文件又有Pages/Index.cshtml文件。 (虽然很奇怪:也许只是索引网址失败了-我只是尝试将浏览器指向Pages/Index.cshtml.cs才有效!)

/Error内容(与工作版本相同):

Pages/Index.cshtml.cs

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using system.web; using microsoft.AspNetCore.Mvc; using microsoft.AspNetCore.Mvc.RazorPages; using Mon.Battle; namespace mon.Pages { public class IndexModel : PageModel { public IndexModel(IBattleManager battleManager) { // I hope I don't have to lock this dict here,I'm only reading configurationSerialized = battleManager.configurationSerialized; } public ConfigurationSerializedFormat configurationSerialized; public void OnGet() { } } } 也包含一些内容,但是它太长且太乱,无法将其作为一个整体发布在这里...但是它肯定应该返回某些内容,并且它在返回之前迁移到3.0。

Pages/Index.cshtml顶部的页面指令足够简短:

Index.cshtml

不幸的是,这些必须与迁移前的版本有所不同:即由于3.0删除了Newtonsoft.JSON,我不得不用@* TODO: The site becomes ugly :( Should I start using Bootstrap,instead of trying to handcraft CSS? *@ @* Hey... I actually start to like how the site looks :) *@ @page @using System.Text.Encodings.Web @using microsoft.Extensions.Configuration @inject JavaScriptEncoder jsencoder @inject IConfiguration conf @using static System.Text.Json.JsonSerializer @model IndexModel @{ Layout = null; } 替换它。

我目前的System.Text.Json(我认为我正是按照上述文档中的说明操作的):

Startup.cs

上一个using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using microsoft.AspNetCore.Builder; using microsoft.AspNetCore.Identity; using microsoft.AspNetCore.Hosting; using microsoft.AspNetCore.Http; using microsoft.AspNetCore.HttpsPolicy; using microsoft.EntityFrameworkCore; using mon.Data; using microsoft.Extensions.Configuration; using microsoft.Extensions.DependencyInjection; using microsoft.Extensions.Hosting; using Mon.Chat; using Mon.MatchMaker; using Mon.Battle; using Mon.Player; namespace mon { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.Configure<IdentityOptions>(options => { options.User.AllowedusernameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; }); services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.getconnectionString("DefaultConnection"))); services.AddDefaultIdentity<ApplicationUser>().AddRoles<IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddRazorPages(); services.AddSignalR(); services.AddSingleton<IBattleManager,BattleManager>(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app,IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticfiles(); app.UseRouting(); app.UseAuthentication(); app.UseEndpoints(endpoints => { endpoints.MapHub<ChatHub>("/chathub"); endpoints.MapHub<MatchMakerHub>("/mmrhub"); endpoints.MapHub<BattleHub>("/battlehub"); endpoints.MapRazorPages(); }); } } }

Startup.cs

我在做什么错?我错过了什么?为什么using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using microsoft.AspNetCore.Builder; using microsoft.AspNetCore.Identity; using microsoft.AspNetCore.Hosting; using microsoft.AspNetCore.Http; using microsoft.AspNetCore.HttpsPolicy; using microsoft.AspNetCore.Mvc; using microsoft.EntityFrameworkCore; using mon.Data; using microsoft.Extensions.Configuration; using microsoft.Extensions.DependencyInjection; using Mon.Chat; using Mon.MatchMaker; using Mon.Battle; using Newtonsoft.Json.Serialization; using Mon.Player; namespace mon { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.Configure<IdentityOptions>(options => { options.User.AllowedusernameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; }); services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.getconnectionString("DefaultConnection"))); services.AddDefaultIdentity<ApplicationUser>().AddRoles<IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services .AddSignalR() .AddJsonProtocol(options => { options.PayloadSerializerSettings.ContractResolver = new DefaultContractResolver(); }); services.AddSingleton<IBattleManager,IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticfiles(); app.UseCookiePolicy(); app.UseAuthentication(); app.UseSignalR(routes => { routes.MapHub<ChatHub>("/chathub"); routes.MapHub<MatchMakerHub>("/mmrhub"); routes.MapHub<BattleHub>("/battlehub"); }); app.UseMvc(); } } } 返回HTTP 404?

如果您需要其他信息,我会提供。

shangcangcun 回答:将我的应用迁移到ASP.NET Core 3.0后,先前有效的索引URL返回404

一旦我的.csproj文件出现问题。确保未列出您的文件:

<ItemGroup>
   <Content Remove="Views\Extractor\Insert.cshtml" />
   <Content Remove="Views\_ViewImports.cshtml" />
</ItemGroup>

当我们复制粘贴文件/更改构建操作等时,可能会发生这种情况。

本文链接:https://www.f2er.com/3123398.html

大家都在问