You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 7 MVC中URL.Action生成URL异常问题

解决ASP.NET Core MVC中Area名称在URL生成时重复的问题

问题原因

你的Authenticate模块应该是使用了ASP.NET Core的Area特性,URL生成时重复Area名称通常是路由配置、控制器Area标记或视图URL生成方式的问题导致的。

解决方案

1. 确认Area路由配置正确

在Program.cs中,确保Area的路由规则没有重复定义Area前缀:

// 正确的Area路由配置
app.MapControllerRoute(
    name: "areas",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

不要在pattern中手动重复Area名称(比如"Authenticate/{controller}/{action}"),否则会和Area特性的前缀叠加导致重复。

2. 控制器正确标记Area特性

确保Security控制器上添加了正确的[Area]特性,不要额外添加包含Area名称的路由前缀:

[Area("Authenticate")]
// 避免添加类似 [Route("Authenticate/[controller]/[action]")] 的路由特性
public class SecurityController : Controller
{
    public IActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }
}

如果控制器上同时标记了[Route]特性且包含Area名称,会和Area路由的前缀重复,导致URL生成错误。

3. 视图中正确生成URL

在Login.cshtml中,显式指定Area参数来生成正确的URL,避免上下文自动重复添加:

@Url.Action("Login", "Security", new { Area = "Authenticate", ReturnUrl = ViewBag.ReturnUrl })

或者使用路由名称生成URL,精准度更高:

@Url.RouteUrl("areas", new { Area = "Authenticate", Controller = "Security", Action = "Login", ReturnUrl = ViewBag.ReturnUrl })

4. 检查视图目录结构

确保Login.cshtml的路径为/Areas/Authenticate/Views/Security/Login.cshtml,符合ASP.NET Core Area的目录规范,否则视图上下文可能错误识别当前Area。

内容的提问来源于stack exchange,提问作者jstuardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:35:05