我有一個帶有此代碼的控制器。我希望所有操作都是/Action/Controller或 ,/{culture}/Action/Controller但 Login 應該是/Login或/{culture}/Login。路線作業正常,但鏈接始終生成為/Accounts/Login或/{culture}/Accounts/Login...
[Route("[controller]/[action]")]
[Route("/[controller]/[action]")]
public class AccountsController : Controller
{
[Route("/Login", Order = 0)]
[Route("/{culture}/Login", Order = 1)]
public IActionResult Login(short? showLostPasswordInfo)
{
return View(model);
}
}
鏈接看起來像這樣
<a asp-action="Login">...</a> //outputs /Accounts/Login
我希望它指向 /Login 但它不斷生成錯誤的鏈接。
Startup.cs 中的配置如下所示
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
endpoints.MapControllers();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}");
endpoints.MapControllerRoute(
name: "cultureDefault",
pattern: "{culture:culture}/{controller}/{action}");
});
});
uj5u.com熱心網友回復:
鏈接始終生成為 /Accounts/Login 或 /{culture}/Accounts/Login...
[Route("[controller]/[action]")] [Route("/[controller]/[action]")]
因為你把[controller]放在[action]前面,所以鏈接為/controller/action
您可以嘗試更改控制器前面的代碼,如下所示。為了更好地展示其他作品,我添加了 index() 。
[Route("[action]/[controller]")]
public class AccountsController : Controller
{
[Route("/Login", Order = 0)]
[Route("/{culture}/Login", Order = 1)]
public IActionResult Login(short? showLostPasswordInfo)
{
return View();
}
public IActionResult Index()
{
return View();
}
....
}
為了清楚地看到結果,我在 _layout.cshtml 中添加了一些內容,如下所示。
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Accounts" asp-action="Login">Login</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Accounts" asp-action="Index">Index2</a>
</li>
結果:

uj5u.com熱心網友回復:
我找到了解決方案。AccountsController 中有另一個 Login 方法用于 HttpPost,它沒有任何 Route 屬性。向第二種方法添加相同的屬性解決了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372577.html
