c# - 在同一个控制器中混合 MVC 和 API
问题描述
我有一个 ASP.NET Core MVC 项目,当我部署并与另一个人一起尝试时,网站冻结并超时。
当我们开始项目时,我们创建了 MVC 控制器并且一切正常。然后我们需要有一些前端的数据源,我们在MVC的同一个控制器中包含“API”(注意引号)方法。然后问题开始出现。
最近我们将项目部署在生产中,我请人帮我测试和发现错误。我们连接,当我们加载主页时,JS API 调用超时。首先,我怀疑 Web 后端所做的服务调用,但经过一些调试,事实并非如此。
阴暗的事情是在当地(而且是单独的),一切都完美无缺。所以我需要在测试中进行更深入的测试,我要求其他测试人员与我同时加载主页,另一方面我启动 Postman 来调用网站的“API”端点。视图完美呈现,JS 调用 API 并在 15 秒后超时,在 Postman 中,请求永远找不到响应。
结论和提问时间,我发现当多个连接使用控制器时,API 调用似乎被阻塞了。经过几次谷歌搜索,我发现在 ASP.NET Core 2.x 中,MVC 和 API 没有扩展相同的基本代码,MVC 扩展了 Controller 因为它支持 Views 而 API 扩展了 ControllerBase,这与不支持 Views 的 Controller 相同。许多人说 MVC 和 API 控制器必须是 2 个不同的控制器。
但是,这并不能回答我的基本问题,为什么当有超过 1 个用户使用该网站时,MVC 控制器中的 API 调用会中断?为什么 MVC 控制器不能处理 API 端点?这是因为意见吗?
希望我让我的想法清楚,因为除了应用人们(和我认为的文档)所说的内容之外,我还想得到一个答案。
编辑:这里是现在的样本
public FooController : Controller
{
[HttpGet]
public IActionResult Index()
{
return View();
}
[HttpGet]
public IActionResult GetData()
{
return StatusCode(200, new { value = 1 });
}
}
索引正确呈现并且调用https://example.com/Foo/GetData超时或当超过 1 个用户使用该网站时永远找不到响应。
路线配置:
applicationBuilder.UseMvc(routes =>
{
routes.MapRoute(name: "cultureRoute",
template: "{culture}/{controller}/{action}/{id?}",
defaults: new { controller = "Logon", action = "Index" },
constraints: new
{
culture = new RegexRouteConstraint("^[a-z]{2}(?:-[A-Z]{2})?$")
});
routes.MapRoute(name: "default", template: "/{controller=Logon}/{action=Index}/{id?}");
});
1 天后,我找到了问题的根源,我们使用 SignalR 在用户之间同步数据,由于某种未知原因,当我禁用 SignalR 时,任何连接的用户都可以正常工作。那么,SignalR 如何在某个时刻阻止对 API 的所有请求呢?
解决方案
推荐阅读
- reactjs - 当我使用 Visual Studio Code 时,此系统上禁用了运行脚本
- javascript - React 中的 Eslint 更漂亮的误报 - serviceWorker.ts
- javascript - Why props is not working with my child component React JS (react native)
- python-3.x - i cant access to post data in get from django
- reactjs - Chrome Extension using React limited to popover
- python - Lines are not highlighted
- java - Painting a Rectangle to a Canvas via Button
- jquery - 在 Bootstrap 中清除数据关闭的所有模态弹出数据
- spring-boot - 用于 SCDF Kubernetes 的 Cloudfoundry-UAA
- c# - 在 Visual Studio 快速操作中优先使用用户命名空间而不是系统