Asp.Net Core 3.1 控制器方法未调用

Posted

技术标签:

【中文标题】Asp.Net Core 3.1 控制器方法未调用【英文标题】:Asp.Net Core 3.1 Controller method not calling 【发布时间】:2021-09-19 17:39:42 【问题描述】:

我有 Asp.net core 3.1 目标应用程序。所以基本上 HomeController 我们正在使用与视图相关的动作触发器,它工作正常。但我在 HomeController 中有另一个名为 PostData 的 Get 方法,但它没有得到触发器。而且总是返回Index方法View html作为响应。

获取网址:http://localhost:9062/Home/PostData?detail=test

HomeController:

public class HomeController : Controller

    public HomeController(StatelessServiceContext context)
    
    
    
    public async Task<IActionResult> Index()
    
        return View();
    
    
    [HttpGet]
    public async Task<string> PostData(string detail)//not getting call
    
        return "PostData";
    

Startup.cs

app.UseMvc(routes =>
      
        routes.MapRoute(
                  name: "default",
                  template: "controller=Home/action=Index/id?");

        routes.MapSpaFallbackRoute(
                  name: "spa-fallback",
                  defaults: new  controller = "Home", action = "Index" );
      );

我已经尝试过,但还没有解决这个问题?

提前致谢。

【问题讨论】:

我不确定它是否有帮助,但 UseMvc 真的只适用于 dotnet core 2.2 及更低版本。您应该改用 UseEndpoints:docs.microsoft.com/en-us/aspnet/core/migration/… 你有没有试过像[HttpGet("postdata")]和当你叫它http://localhost:9062/PostData?detail=test 是的,我试过[HttpGet("postdata")],但它不起作用 @r08 你把它叫做http://localhost:9062/PostData?detail=test? 【参考方案1】:

在您的 Startup.cs 中

app.UseMvc(configureRoutes => 
                configureRoutes.MapRoute(name: "default", template: "controller=Login/action=Login/id?");
            );

如您所见,您的操作方法需要一个 id。将您的字符串详细信息更改为字符串 id,它应该可以正常工作。

【讨论】:

我已经在启动cs文件中有类似的配置 尝试改变公共异步任务 PostData(string id)//没有得到调用 return "PostData"; 【参考方案2】:
http://localhost:9062/Home/PostData?detail=test

首先,请检查您的应用程序配置和请求 URL,它是 http 请求,而不是 https,您是否将应用程序更改为使用 Http?如果没有,请尝试更改请求 URL,如下所示:

https://localhost:9062/Home/PostData?detail=test

其次,由于您使用的是 MapSpaFallbackRoute() 方法,因此您的应用程序是 SPA 应用程序,对吧?我创建了一个 SPA 应用程序并检查了您的代码(添加 Home Controller 和 PostData 操作,然后使用 [HttpGet()][HttpGet("postdata")]),一切正常,请求 URL 如下:https://localhost:44332/Home/PostData?detail=testhttps://localhost:44332/postdata?detail=test

我建议您可以先尝试删除 SPA 路由,然后检查 MVC 路由是否有效。如果还是不行,能否创建一个关于它的新示例并通过 Github 或 OneNote 分享,以便我们重现并帮助您修复它。

【讨论】:

以上是关于Asp.Net Core 3.1 控制器方法未调用的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP .NET Core 3.1 中调用 LoggerExtensions 方法时禁用/关闭 FxCop CA1303

ASP.net core 3.1 中控制器和剃须刀页面之间的路由

ASP.NET Core 3.1 中的证书身份验证实现

使用两个 JWT 身份验证方案,ASP.NET Core 3.1

Asp.Net Core 3.1 数据被检索但未保存到数据库中

发布时未调用具有 Telerik Kendo Grid Read 方法 ([DataSourceRequest]) 的 ASP.NET Core 2.0