Как вызвать методы контроллера из реакции - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь изучить React с ASP.NET Core 3.0, и у меня есть некоторые проблемы с вызовом методов контроллеров. Если у контроллера есть один метод, такой как Get (), то все в порядке. Но если у него больше одного, то получается ошибка. Что-то вроде конфликта множественных конечных точек. Я не могу понять и не могу найти информацию об этом.

Я вызываю методы с кодом, подобным этому:

await FetchData(){
    const response = await fetch('api/article/makenewpost/?id=');
    const data = await response.json();
    this.setState({data:data});
}
async fetchData() {
        const response = await fetch('api/article/getarticles/?id=' + this.props.id);
        const data = await response.json();
        this.setState({ blocktitle: this.props.blocktitle, data: data, id: this.props.id });
    }

В качестве временного решения я сделал метод Get в контроллере с оператором switch, но он выглядит очень плохо для меня.

public IActionResult Get(int? id, string method){
    switch (method)
    {
        case "GetArticles":
        {...}
        case "MakeNewPost":
        {...}
    }
}

ОБНОВЛЕНИЕ: Попробовал решение Сайутта. Больше нет конфликта, но в ответ у меня есть что-то вроде файла манифеста, так что это ошибка, когда я читаю. Почему я не могу получить правильный ответ? Я просто отделил свои методы от метода с одним переключателем.

[Route("api/[controller]")]
public class ArticleController : Controller
{
    private readonly DzikanContext _context;
    public ArticleController(DzikanContext context)
    {
        _context = context;
    }
    // GET: api/<controller>        

    [Route("api/[controller]/getarticles")]        
    public IActionResult GetArticles(int id)
    {


        var titles = _context.Post.Where(p => p.TypeId == id).Select(p => p);
        var filtered = titles.Skip(Math.Max(0, titles.Count() - 3)).ToList();


        Dictionary<int, string> icons = new Dictionary<int, string>
        {
            {1, "someUrl" },
            {2, "someUrl2"},
            {3, "someUrl3" }

        };

        List<PostsPayload> articles = new List<PostsPayload>();

        foreach (var title in filtered)
        {
            articles.Add(new PostsPayload
            {
                IconUrl = icons[title.ResourceId],
                ArticleBody = title.Title
            });
        }
        return Json(articles.ToArray());
    }

    [Route("api/[controller]/makenewpost")]
    public IActionResult MakeNewPost(int id)
    {
        var articles = _context.Post.Where(p => p.Id == id).Select(p => p);
        var title = articles.Select(p => p.Title).First();
        var body = articles.Select(p => p.Body).First();
        List<Post> posts = new List<Post>{
               new Post
                {
                    Title = title,
                    Body = body
                }};
        return Json(posts.ToArray());
    }
}

Как я уже говорил ранее, когда я использую один метод с переключателем (ничего не изменилось в методах, когда я их разделял), он работает нормально.

1 Ответ

0 голосов
/ 30 октября 2019

Добавить маршруты к отдельным конечным точкам в контроллере.

[Route("api/posts/createnewpost")]
public IActionResult CreateNewPost(...) { /* your logic */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...