我正在尝试学习ASP.NET Core3.0的React,我在调用控制器的方法时遇到了一些问题。如果控制器有像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 });
}作为临时解决方案,我使用switch语句在控制器中创建了Get方法,但它在我看来非常糟糕。
public IActionResult Get(int? id, string method){
switch (method)
{
case "GetArticles":
{...}
case "MakeNewPost":
{...}
}
}更新:尝试过saidutt的解决方案。不再有冲突,但作为响应,我得到了类似清单文件的东西,所以我读到它是错误的。为什么我得不到正确的回答?我只是将我的方法与单一的切换方法分开。
[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());
}
}正如我前面所说的,当我使用带有switch的单一方法时(当我将它们分开时,方法中没有任何改变),它工作得很好。
发布于 2019-10-30 22:08:40
将路由添加到控制器中的各个端点。
[Route("api/posts/createnewpost")]
public IActionResult CreateNewPost(...) { /* your logic */ }发布于 2020-12-23 03:56:14
[Route("api/[controller]")]
[ApiController]
public class ArticleController : Controller
{
private readonly DzikanContext _context;
public ArticleController(DzikanContext context)
{
_context = context;
}
// GET: api/<controller>
[HttpGet]
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());
}
// api/<controller>/makenewpost
[HttpGet("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());
}
}https://stackoverflow.com/questions/58627139
复制相似问题