【问题标题】:ASP.NET [Route("api/dvds/search")] function does not get calledASP.NET [Route("api/dvds/search")] 函数没有被调用
【发布时间】:2020-09-13 23:35:39
【问题描述】:

我正在对'http://localhost:44315/api/listings/search'进行ajax调用,它可以接受四个参数,例如title,releaseYear,director,和rating,但是每次我调用路由时,在调试时,函数Search()从来没有被调用。我也尝试过邮递员,但似乎我使用的任何工具都只是挂起并且无法到达路径。如果你知道另一种设置这条路线的方法,我想知道。

这是我的 ListingsAPIController.cs

public class ListingsAPIController : ApiController
    {
        [Route("api/dvds/search")]
        [AcceptVerbs("GET")]
        public IHttpActionResult Search(string title, int? releaseYear, string director,
            string rating)
        {
            var repo = DvdRepositoryFactory.GetRepository();

            try
            {
                var parameters = new ListingSearchParameters()
                {
                    Title = title,
                    ReleaseYear = releaseYear,
                    Director = director,
                    Rating = rating
                };

                var result = repo.Search(parameters);
                return Ok(result);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
    }

视图/列表/Search.cshtml

@section Scripts
{
    <script>
        $(document).ready(function () {
            $("#searchForm").submit(function (e) {
                search();
                return false;
            });
        });

        function search() {            
            var params;

            params = 'title=' + $('#title').val() + '&releaseYear=' + $('#releaseYear').val() + '&director=' +
                $('#director').val() + '&rating=' + $('#rating').val();

            $.ajax({
                type: 'GET',
                url: 'http://localhost:44315/api/dvds/search?' + params,
                success: function (results) {
                    console.log("search");
                    $('#searchResults').empty();

                    $.each(results, function (index, dvd) {                        
                        var html = '<div class="col-xs-8 col-sm-4 col-md-4">' +
                            '<div class="card" style="border:2px solid #0094ff; width: 20rem; border-radius: 5px; ">' +
                            '<div class="pl-3 pt-1 text-center">' +
                            '<h4 class="card-title text-primary">' + dvd.Title + '</h4>' +
                            '<p class="recentListing">' + dvd.ReleaseYear + '</p>' +
                            '<p class="recentListing">' + dvd.Director + '</p>' +
                            '<p class="recentListing">' + dvd.Rating + '</p>' +
                            '<p class="recentListing">' + dvd.Notes + '</p>' +
                            '</div>';

                        $('#searchResults').append(html.toString());
                    });

                },
                error: function () {
                    alert('Error performing search, try again later!')
                },
                done: function () {
                    alert('Search AJAX complete')
                }
            });
        }
    </script>
}

我尝试将路由从listings 重命名为dvds,但仍然出现错误。

更新:我了解到,Visual Studio 2019 已强制项目在将 身份验证 更改为“个人用户帐户”时使用“配置 HTTPS”选项。 HTTP 曾经是旧版本的默认设置。

【问题讨论】:

  • 您遇到的错误是什么?如果您在错误函数中设置参数,您可以在警报中看到错误。
  • 是的,它需要一段时间才能显示,错误:'执行搜索时出错,稍后再试!'
  • 感觉路由并没有在监听任何东西,我只是希望有一种方法可以查看正在监听的路由列表,看看路由是否真的正确。我知道在 asp.net core 中我可以运行 cli,但我不确定你是否可以在 asp.net 中执行此操作。

标签: c# asp.net routes


【解决方案1】:

你打电话给http,而你的api在https所以在你的搜索页面调用https

url: 'https://localhost:44315/api/dvds/search?'

或者只是删除基本 URL:

url: '/api/dvds/search?' 

检查你的查询,也许你的 SQL 有错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2017-04-18
    • 2011-12-30
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多