Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当控制器方法具有异步后缀时,AspNetCore 3.0(从2.2升级)路由似乎中断_C#_Asp.net Core_.net Core - Fatal编程技术网

C# 当控制器方法具有异步后缀时,AspNetCore 3.0(从2.2升级)路由似乎中断

C# 当控制器方法具有异步后缀时,AspNetCore 3.0(从2.2升级)路由似乎中断,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我将我的项目从2.2升级到了Core3.0,除了一个get JSON请求外,其他一切似乎都很好。我有以下Js代码向主控制器发出Ajax请求: var isLastPage = false; var incidentModel = { incidents: ko.observableArray([]), getIncidents: function(a) { var self = this; //var

我将我的项目从2.2升级到了Core3.0,除了一个get JSON请求外,其他一切似乎都很好。我有以下Js代码向主控制器发出Ajax请求:

    var isLastPage = false;
    var incidentModel = {
        incidents: ko.observableArray([]),
        getIncidents: function(a) {
            var self = this;
            //var $incdiv = $('#incidentsList');
            $.getJSON('@Url.Action("AjaxPageAsync", "Home")', { page: page++, user: user, type: type }, function(data) {
                //console.log(data);
                self.incidents(self.incidents().concat(data));
                if (data[0].IsLastPage) {
                    isLastPage = true;
                }
                a();
            });
        }
    }
主控制器如下所示:

public async Task<ActionResult> AjaxPageAsync([FromQuery] string type, [FromQuery] string user, [FromQuery] int? page)
{
       //Get some json data
       return Json(Incident);
}
调试输出类似于:

Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2.0 GET https://localhost:44366/Home/AjaxPageAsync?page=1&user=&type=&_=1575386536876
2.2版本完全相同,运行良好。我想它可能是附加在url末尾的数字,但这也存在于2.2中

此时,我认为控制器中AjaxPageAsync任务的语法有问题,但不确定应该是什么


有人知道我哪里出了问题吗?谢谢。

我将从消除getJson开始,然后对端点运行手动Postman或Curl,以创建最简单的可重复使用的用例来进行故障排除

如果它仍然是404,那么您知道它是AspNetCore的配置端

如果不是404,那么对NetCore 3.0的Ajax调用就有一个特定的问题。这会缩小你搜索的范围,从而缩小你的谷歌参数

我猜实际问题是您设置的路由不起作用,或者NetCore3中的配置发生了变化。当您在NetCore 1.0/1.2中进行路由设置时,通常会发生这种情况。几年后,您将一个向后兼容的示例迁移到NetCore 2.0,几年后又迁移到NetCore 3.0,并且NetCore 3可能不完全支持该路由配置,而不需要一些额外的环

尝试在同一个控制器中创建一个简单的helloworld并将其连接起来。如果这样做有效的话,您基本上已经将问题隔离到控制器/方法和路由

如果你根本不支持它,它也不会编译

…如此摇摆和回旋

而且,这是一项任务,但您只返回结果。。。这可能是一个简化的示例,但请确保您正确返回/等待

查看AspNetCore3中的特定异步方法标记,有一个MvcOption抑制了AspNetCore3.0中的SyncSuffixActionName,默认情况下为true,看起来像是首先找到它的

根据,在.NETCore3.0Async中,从操作名称中删除。您的端点位于/Home/AjaxPage。您可以通过替换

services.AddControllers();


在ConfigureServices方法中,或仅使用新路由

控制器类具有哪些属性?那么动作方法呢?你的URL是错误的。即使在2.2中,URL也应该是AjaxPage,而不是AjaxPageAsync。您是使用路由属性来公开异步后缀还是自定义路由?至少发布控制器和方法属性。您可能应该发布Startup的路由配置代码。请发布控制器和操作属性以及路由配置。使用的URL不是典型的。人们猜不到自定义路由配置有什么问题,他们猜不到see@PanagiotisKanavos我没有使用任何属性,我发布的是我正在使用的,2.2必须在某种程度上进行补偿?我还将尝试删除异步部分,看看会发生什么。这是默认的新端点路由。我没有在前面使用任何定制的东西。我基本上创建了一个新的3.0项目,并将默认路由粘贴到这个项目中,除了这个json请求之外,所有这些似乎都正常工作。。。希望这能回答所有的问题?我会添加更多的控制器代码,但没有太多其他的。。。即使在2.2版本中,只要使用DI和PublicActionResult索引,AjaxPageAsync方法也会显示为AjaxPage。OP必须修改默认路由,以公开异步路由,假设它们可能正在等待控制器方法中的某个异步调用。我同意@MattU的观点,它可能只是在示例中出现了一个问题。在我个人网站的控制器中,我的异步方法中也有异步,所以它确实可以工作,但我确实使用自定义路由,所以我的直觉是这可能是个问题。如果没有看到实际的route+控制器,我们就不知道了。正如我上面提到的,正如Housecat所写的,没有什么是定制的,除非VS在某处为我更改它。当我添加一个wait调用时,它在2.2中用Async后缀为我重新命名了任务,但只在控制器中。然后,我只是在javascript中对其进行了更改,以修复它创建的问题。我从来没有使用过或甚至不知道这些异步后缀,但我认为它这样做是有原因的。谢谢你们的投入和帮助,就这样。实际上,我刚刚删除了json请求和任务名称中名称的异步部分。这是最初的名称,当我在2.2中添加wait调用时,它自动重命名了任务,但只在控制器中,所以我在javascript中也使用了这个名称。无论如何,非常感谢。在那上面花了好几个小时,我以为那只是一个名字。
services.AddControllers();
services.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false);