[英]Web api route prefixes with controller action names
我有一个 asp.net 核心 3.1 应用程序。 在启动文件中,我有以下路线。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" });
endpoints.MapControllers();
endpoints.MapRazorPages();
});
我有 position controller 索引和详细信息视图。
public class PositionController : Controller
{
private readonly IPositionRepository repository;
public Position Position { get; set; }
public PositionController(IPositionRepository repository)
{
this.repository = repository;
}
public IActionResult Index()
{
return View();
}
public async Task<IActionResult> Details(int id)
{
if (id < 0)
return View();
Position = await repository.FindPositionById(id);
if (Position == null)
return RedirectToAction("_NotFound");
return View(Position);
}
索引视图指向 https://localhost:44356/Position,详细视图指向 https://localhost:44356/Position/1。 (位置的 id=1)
我有一个 web api 使用 Get 和 GetTaskGroups 操作获取所有位置数据。
[Produces("application/json")]
[Route("api/positions")]
[ApiController]
public class PositionsController : Controller
{
private readonly IPositionRepository repository;
public PositionsController(IPositionRepository repository)
{
this.repository = repository;
}
[HttpGet]
public async Task<IActionResult> Get()
{
return Json(new { data = await repository.GetPositions() },
new JsonSerializerSettings() { MetadataPropertyHandling = MetadataPropertyHandling.Ignore
});
}
[HttpGet("{posId}/tasks")]
public async Task<IActionResult> GetTaskGroups(int posId)
{
return Json(new { data = await repository.GetTaskGroups(posId) });
}
我正在使用 jQuery ajax 调用获取数据,如下所示。
function loadPositions() {
positions =
$('#positionsList').DataTable({
"ajax": {
"url": "api/positions",
"type": "get",
"datatype": "json"
},...
function loadTaskGroups(posId) {
taskGroups =
$('#taskGroups').DataTable({
"ajax": {
"url": `/api/positions/${posId}/tasks`,
"type": "get",
"datatype": "json"
},...
我可以为索引视图获取数据,但不能为详细信息视图获取数据。 The web api route points to https://localhost:44356/Position/Details/1/api/positions/1/tasks which should point to https://localhost:44356/api/positions/1/tasks. 原因是我使用以下路线为索引视图获取数据 https://localhost:44356/api/positions/
我认为,问题与默认路由有关。 url 中不会显示索引视图,但会显示详细信息视图。
试试看
function loadPositions() {
positions =
$('#positionsList').DataTable({
"ajax": {
"url": "/api/positions",
"type": "get",
"datatype": "json"
},...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.