【问题标题】:Can I have MVC Application Controller classes for AJAX API calls in a APS.NET Core Web Application project?我可以在 APS.NET Core Web 应用程序项目中为 AJAX API 调用提供 MVC 应用程序控制器类吗?
【发布时间】:2019-10-16 16:42:26
【问题描述】:

我创建了一个面向 2.1 的新 .NET Core 应用程序项目。默认情况下,它使用页面路由,因此我创建的新 cshtml 文件遵循标准文件页面路由。

接下来我想测试从客户端到服务器的 ajax 调用。我尝试添加名为 TestController 的 MCV 应用程序控制器并向其中添加以下内容:

public class TestController : Controller
    {
        // GET: /<controller>/
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost("Test/RunTest")]
        public ActionResult<string> RunTest()
        {
            return "Got it!";
        }
    }

这是我的 startup.cs 文件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc();
        }

当我尝试通过 Postman 向 https://localhost:44313/Test/RunTest 发帖时,我收到 404 page not found 错误。 我认为这是因为我的剃须刀项目没有将请求路由到我的项目中的控制器,但我不确定。

我应该怎么做才能向 MVC 控制器发出 ajax 请求?

【问题讨论】:

  • 在问题中添加 ajax 调用。所以,我们可以很容易地弄清楚。
  • 您是否尝试通过邮递员或任何其他类似工具调用您的操作?
  • 是的,我正在从邮递员那里调用localhost:44313/Test/Runtest 端点来尝试测试它。

标签: c# ajax asp.net-mvc razor razor-pages


【解决方案1】:

Runtest 操作上的属性路由模板没有指定前缀,因此您不应在 URL 前加上“/Test/”。 AJAX 帖子应发送至https://localhost:44313/RunTest

如果您希望控制器名称作为路由的一部分,您可以将其包含在模板中:

[HttpPost("Test/RunTest")]

或者您可以为控制器中的所有操作指定一个前缀:

[RoutePrefix("Test")]
public class TestController : Controller

【讨论】:

  • 我认为可以解决它,但是当我添加 Test/RunTest 属性时,我仍然得到 404 page not found 错误。我是否必须在启动时配置一些东西才能让路由工作?
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多