Я пытаюсь изучить 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());
}
}
Как я уже говорил ранее, когда я использую один метод с переключателем (ничего не изменилось в методах, когда я их разделял), он работает нормально.