繁体   English   中英

.Net core 5 设置默认启动路由

[英].Net core 5 set default startup route

我是老派 ASP.Net 和 AngularJS 开发人员,我现在正在开发现有的 .Net 5 Core 应用程序(将迁移到 .Net Core 6)。 这对我来说是新技术,我仍在解决问题。 我期望非常简单的一件事是更改 Web UI 的起点,但我无法按预期完成这项工作。 现在,应用程序在默认的控制器路由 Home 上启动。 我想改变它,而不是登陆主页(通过 myapp.mydomain.com),我希望它登陆另一个控制器,客户端(通过 myapp.mydomain.com/Clients)。 我尝试在定义默认路由的 Startup.cs 中进行更改:

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            //pattern: "{controller=Home}/{action=Index}/{id?}");
            pattern: "{controller=Clients}/{action=Index}/{id?}");
    });

客户端控制器:

namespace MyCompany.MyApp.Controllers
{
    [Authorize]
    public class ClientsController : Controller
    {
        private readonly ILogger<ClientsController> _logger;
        private readonly IClientService _service;
        private readonly IAppVersionService _appVersionService;
        private readonly IIisService _iisService;
        private readonly IWindowsServices _windowsServices;
        private readonly IAuthHelpers _authHelpers;

        public ClientsController(ILogger<ClientsController> logger, IClientService service, 
            IAppVersionService appVersionService, IIisService iisService, IWindowsServices windowsServices, IAuthHelpers authHelpers)
        {
            _logger = logger;
            _service = service;
            _appVersionService = appVersionService;
            _iisService = iisService;
            _windowsServices = windowsServices;
            _authHelpers = authHelpers;
        }

        [HttpGet]
        [Route("/Clients")]
        public async Task<IActionResult> Index(int? pageNumber)
        {
            _logger.LogInformation("Client Index starting...");
            await SyncAppVersionsWithS3();
            await AddVersionsToViewData();
            ViewBag.Error = TempData["Error"];
            ViewBag.Success = TempData["Success"];
            var paginatedClients = await PaginatedList<ClientDto>
                .CreateAsync(_service.Query(), pageNumber ?? 1, 10);
            return View(paginatedClients);
        }

但这会导致启动时出现 404。 回到旧的 asp.net 时代,我只需 rt-单击一个 aspx 文件并选择设置为启动。 我只想在这里做同样的事情,而不是一团糟。 我怎么做? 谢谢!

问题是默认控制器(客户端)中的[Route]属性。 如果您已定义[Route("Clients")] ,则只能使用域/客户端访问。

解决方案1:删除路由属性,因为Clients, Clients/Index, ""是自动处理的(program.cs中的MapRoute)

 [HttpGet]
 public async Task<IActionResult> Index(int? pageNumber)
 {
     ...
 }

解决方案2 多路由:(这种情况下不需要更改默认路由)

[HttpGet]
[Route("")]
[Route("Clients")]
[Route("Clients/Index/{pageNumber?}")]
public async Task<IActionResult> Index(int? pageNumber)
{
         ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM