我有兩個控制器,一個是 Web API 控制器,另一個是 MVC 控制器。這兩個控制器具有相同的名稱和相同的操作名稱,盡管 API 控制器中的一個是 post,而 MVC 中的一個是 get,如下所示。
這是 API 控制器:
[Route("api/[controller]")]
public class SameNameController : ControllerBase
{
[HttpPost]
public IEnumerable<*className*> SameNameAction([FromBody] *typeName*[] data)
{
// Detail implementation
}
}
這是 MVC 控制器:
public class SameNameController: Controller
{
public ActionResult SameNameAction(int? page, int? pageSize)
{
//Detail implementation
}
}
我X.PagedList用來生成分頁。當我點擊任何頁面時,我收到一個錯誤
HTTP 405 - 此頁面無法正常作業
經過進一步檢查,我意識到生成的 URL 是問題所在。
這是視圖中存在問題的部分。
@Html.PagedListPager((IPagedList)Model, page => Url.Action("SameNameAction", "SameNameController", new { page, pageSize= 5}))
這是program.cs中的路由定義。如您所見,這只是基本的東西。
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
我希望這Url.Action會為 MVC 控制器的 get 操作生成一個 url。相反,它會為 Web API 控制器的 post 操作生成一個 url。
這就是我得到的:
<a href="/api/SameNameController?page=2&pageSize=5">2</a>
這是我所期望的:
<a href="/SameNameController/SameNameAction?page=2&PageSize=5">2</a>
我從未體驗過Url.Action生成到 API 控制器的路由。我不確定這是由于頁面串列結合url.action還是url.action單獨。
我可以更改 API 控制器的操作名稱,并按預期生成 URL。然而,這不是問題。我想知道為什么它首先映射到 API 控制器而不是 MVC 控制器。
uj5u.com熱心網友回復:
我希望 Url.Action 會為 MVC 控制器的 get 操作生成一個 url。相反,它會為 Web API 控制器的 post 操作生成一個 url。
根據您的情況,我已經檢查了您的代碼。如您所知,
希望它會相應地指導您。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527958.html
標籤:C#asp.net 核心asp.net-core-mvcasp.net-core-webapi
