मैं 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 });
    }

अस्थायी समाधान के रूप में मैंने स्विच स्टेटमेंट के साथ कंट्रोलर में गेट मेथड बनाया, लेकिन यह मुझे बहुत बुरा लगता है।

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());
    }
}

जैसा कि मैंने पहले कहा था, जब मैं स्विच के साथ एकल विधि का उपयोग करता हूं (जब मैंने उन्हें अलग किया तो विधियों में कुछ भी नहीं बदला गया है) यह ठीक काम करता है।

0
Timofey Melentev 30 अक्टूबर 2019, 17:04

2 जवाब

सबसे बढ़िया उत्तर

नियंत्रक में अलग-अलग समापन बिंदुओं के लिए मार्ग जोड़ें।

[Route("api/posts/createnewpost")]
public IActionResult CreateNewPost(...) { /* your logic */ }
0
saidutt 30 अक्टूबर 2019, 14:08
[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());
    }
}
0
dtruong8 22 पद 2020, 19:56