В ASP .NET Core 2.2 у меня есть такой код:
public class MainController : Controller
{
public IActionResult Index() => ServeView("index.html");
[ResponseCache(Location = ResponseCacheLocation.None, Duration = 0)]
public IActionResult Postlogin() => ServeView("postlogin.html");
private IActionResult ServeView(string viewName)
{
var vm = new MainPageModel {BaseUrl = Request.GetBasePath().EnsureEndsWithSlash()};
return View("~/wwwroot/" + viewName, vm);
}
}
И маршруты настроены так:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "postlogin",
template: "postlogin.html", defaults: new {controller = "Main", action = "Postlogin"});
routes.MapSpaFallbackRoute("fallback", new {controller = "Main", action = "Index"});
});
В ASP .NET Core 3.0 тот же контроллер перестал работать,Я получаю ошибку, как это:
An unhandled exception occurred while processing the request.
InvalidOperationException: The view '~/wwwroot/index.html' was not found. The following locations were searched:
~/wwwroot/index.html
Конечно, файл находится в этом месте ~/wwwroot/index.html
. Маршрутизация настроена так:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute("root",
"/", new { controller = "Main", action = "Index" });
endpoints.MapControllerRoute("index",
"index.html", new { controller = "Main", action = "Index" });
endpoints.MapControllerRoute("postlogin",
"postlogin.html", new { controller = "Main", action = "PostLogin" });
endpoints.MapControllers();
});
И в ConfigureServices
Я добавляю Views
, используя services.AddControllersWithViews();
Я обошел проблему, переименовав расширение файлов из html
до cshtml
. И вместо того, чтобы служить представлению ~/wwwroot/index.html
, я служу ~/wwwroot/index.cshtml
, и теперь все работает. Но я хотел бы знать, это преднамеренное изменение или что-то непредвиденное произошло?