【问题标题】:Asp.Net Core 3.1 Controller method not callingAsp.Net Core 3.1 控制器方法未调用
【发布时间】: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?

标签: c# asp.net-core .net-core asp.net-core-routing


【解决方案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 分享,以便我们重现并帮助您修复它。

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 2021-02-06
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多