【问题标题】:Cant perform a post request via axios无法通过 axios 执行发布请求
【发布时间】:2019-11-14 01:39:54
【问题描述】:

我正在尝试在 Visual Studio 中使用 vue.js 和 axios 填充表格。 当我调试我的解决方案时,我得到一个空表,标题为 Title。

我尝试了另一种 POST 请求的方法,但没有奏效:

https://github.com/axios/axios?fbclid=IwAR0qTUEwV4k1PK40ocQF7PBSNg5xJR5PWw5CbwIAgRmlwLcLxbzmW1OcB5Y

型号:

namespace MovieList.Models
{
public class Movie
{
    public string Title { get; internal set; }
}
}

控制器:

namespace MovieList.Controllers {

public class MoviesController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public JsonResult GetMovies()
    {
        var movieService = new MovieService();
        List<Movie> movies = movieService.GetMovies();
        return Json(movies);
    }
}
}

我还建立了一个支持服务类:

namespace MovieList.Controllers
{
public class MovieService
{
    public List<Movie> GetMovies()
    {
        var movieRepo = new MovieRepo();
        var movies = movieRepo.GetMovies();
        return movies;
    }
}
}

.. 和一个存储库:

namespace MovieList.Controllers
{
public class MovieRepo
{
    private List<Movie> movieList = new List<Movie>
    {
        new Movie {
            Title = "Movie"
        },
        new Movie {
            Title = "Movie II"
        },
        new Movie {
            Title = "GMovie III"
        }
    };

    public List<Movie> GetMovies()
    {
        return movieList;
    }
}

}

索引.html:

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" 
</script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<div id="app">
    <div class="search-wrapper">
        <input type="text" v-model="search" placeholder="Search" 
class="form-control"/>
    </div>
    <br>
    <div class="wrapper">
        <div class="card" >
            <table style="width:100%" class=" table movie-table">
                <tr>
                    <th>Title</th>
                </tr>
                <tr v-for="post in movieList">
                    <td>{{ post.Title }}</td>
                </tr>
            </table>
        </div>
    </div>
</div>

Javascript:

const app = new Vue({
el: '#app',
data: {
    search: '',
    movieList: []
},
computed: {
    filteredList() {
        return this.movieList.filter(post => {
            return 
post.title.toLowerCase().includes(this.search.toLowerCase())
        })
    }
},
mounted() {
    axios.post("http://localhost:60103/Movies", {}).then((data) => {
        console.log(data)
    });
}
})

【问题讨论】:

  • 您是否尝试过使用相对路径/Movies
  • 是的,还是什么都没有

标签: c# html json vue.js axios


【解决方案1】:

尝试将[HttpPost] 属性添加到控制器中的操作方法。

更新

namespace MovieList.Controllers {

[Route("api/[controller]")]
[ApiController]
public class MoviesController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public JsonResult GetMovies()
    {
        var movieService = new MovieService();
        List<Movie> movies = movieService.GetMovies();
        return Json(movies);
    }
}
}

这将允许您通过 /api/MoviesGET 请求访问 api。由于您没有修改 DB 中的状态,因此您可以使用 GET 而不是 POST

正如cmets中指出的https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio是一个很好的入门参考

【讨论】:

  • 谢谢,但我试过了,它在“/”应用程序中给了我一个 404 服务器错误。
  • 404 表示找不到资源。正如@Ramesh 指出的那样,您需要在控制器[Route("/Movies")][HttpPost] 属性中添加Route 属性。这个Microsoft Tutorial 可能会有所帮助。
猜你喜欢
  • 2017-12-04
  • 1970-01-01
  • 2021-11-19
  • 2022-12-10
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2018-04-25
相关资源
最近更新 更多