Как вызвать функции, определенные в контроллере в проекте asp. net core razor pages - PullRequest
2 голосов
/ 02 апреля 2020

Я новичок в ядре asp. net и изучаю различные способы выполнения вызовов API для функций, определенных в контроллере.

У меня есть контроллер новостей basi c, как показано ниже, если я сохраняю только одну функцию в этом контроллере GetAll(), тогда я могу сделать успешный вызов API, используя https://localhost:44364/api/news

, и когда я добавляю две другие функции, тогда тот же https://localhost:44364/api/news получает сообщение об ошибке, как показано ниже, Совершенно очевидно, поскольку я не упоминаю имя функции в своем URL.

Мой вопрос заключается в том, как я могу определить маршрут для каждой функции, чтобы я мог вызывать каждую из этих функций по URL и из ajax function

Ошибка

 BookListRazor.Controllers.NewsController.GetSingleNews (BookListRazor)
    BookListRazor.Controllers.NewsController.GetAll (BookListRazor)
    BookListRazor.Controllers.NewsController.GetAllNews (BookListRazor)

Код

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using BookListRazor.Model;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;

    namespace BookListRazor.Controllers
    {
        [Route("api/News")]
        [ApiController]
        public class NewsController : Controller
        {
            private readonly ApplicationDbContext _db;

            public NewsController(ApplicationDbContext db)
            {
                _db = db;
            }

            //get all news by languageID
            [HttpGet]
           // [Route("api/news/getallnews/{1}")]
            public async Task<IActionResult> GetAllNews(int langID)
            {
                //var query = await _db.News.OrderByDescending(x => x.NewsDate).Where(x => x.LanguageID == 1 && x.NewsActive==true && x.NewsVisible==true).ToListAsync();

                return Json(new { data = await _db.News.OrderByDescending(x => x.NewsDate).Where(x => x.LanguageID == langID && x.NewsActive == true && x.NewsVisible == true).ToListAsync() });
            }

            //get all news 
            [HttpGet]
            public async Task<IActionResult> GetAll()
            {
                return Json(new { data = await _db.News.OrderByDescending(x => x.NewsDate).Where(x => x.LanguageID == 1 && x.NewsActive == true && x.NewsVisible == true).ToListAsync() });
            }


            //get single news by newsID
            [HttpGet]
            public async Task<IActionResult> GetSingleNews(int id)
            {
                return Json(new { data = await _db.News.FirstOrDefaultAsync(x=>x.NewsID == id) });
            }

        }
    }

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете изменить, как показано ниже:

[Route("api/News/[action]")]
[ApiController]

Запросить URL, как показано ниже:

//https://localhost:44364/api/news/GetAllNews?langID=1
[HttpGet]
public async Task<IActionResult> GetAllNews(int langID)
{
}

//https://localhost:44364/api/news/GetAll
[HttpGet]
public async Task<IActionResult> GetAll()
{       
}

//https://localhost:44364/api/news/GetSingleNews?id=1
[HttpGet]
public async Task<IActionResult> GetSingleNews(int id)
{       
}
1 голос
/ 02 апреля 2020

Вы можете установить атрибут [Маршрут] для каждого метода,

Вот так

    public class TestController : Controller
    {
        [Route("api/Test")]
        public IActionResult Index1()
        {
            return Json("Hello World 1");
        }

        [Route("api/Test/Index2")]
        public IActionResult Index2()
        {
            return Json("Hello World 2");
        }
    }

Пожалуйста, попробуйте,

Надеюсь, это поможет

...