C# 在同一控制器中混合MVC和API

C# 在同一控制器中混合MVC和API,c#,ajax,asp.net-core-mvc,C#,Ajax,Asp.net Core Mvc,我有一个ASP.NET核心MVC项目,当我部署并与另一个人一起尝试时,网站冻结并超时 当我们开始这个项目时,我们创建了MVC控制器,一切正常。然后,我们需要为前端提供一些数据源,并在MVC的同一控制器中包含“API”(注意引号)方法。然后问题开始出现 最近我们在生产中部署了这个项目,我请人帮我测试并发现bug。我们连接,当我们加载主页时,JSAPI调用timeout。首先,我怀疑web后端会进行服务调用,但经过一些调试后,情况并非如此 阴暗的事情是在本地(和单独),一切工作完美无瑕。 所以我需要

我有一个ASP.NET核心MVC项目,当我部署并与另一个人一起尝试时,网站冻结并超时

当我们开始这个项目时,我们创建了MVC控制器,一切正常。然后,我们需要为前端提供一些数据源,并在MVC的同一控制器中包含“API”(注意引号)方法。然后问题开始出现

最近我们在生产中部署了这个项目,我请人帮我测试并发现bug。我们连接,当我们加载主页时,JSAPI调用timeout。首先,我怀疑web后端会进行服务调用,但经过一些调试后,情况并非如此

阴暗的事情是在本地(和单独),一切工作完美无瑕。 所以我需要更深入地测试,我让另一个测试人员和我一起加载主页,另一方面我启动Postman来调用网站的“API”端点。视图呈现得非常完美,JS调用API并在15秒后超时,在Postman中,请求从未找到响应

总结和提问时,我发现当多个连接使用控制器时,API调用似乎被阻塞。在谷歌搜索了几次之后,我发现在ASP.NET Core 2.x中,MVC和API并没有扩展相同的基本代码,MVC扩展Controller是因为它支持视图,而API扩展ControllerBase与不支持视图的Controller相同。很多人说MVC和API控制器必须是两个不同的控制器


但是,这并不能回答我的基本问题,当有超过1个用户使用该网站时,为什么MVC控制器中的API调用会中断?为什么MVC控制器不能处理API端点?这是因为风景吗

希望我能把我的想法说清楚,因为这是我想在应用人们(和我认为的文档)所说的内容之外得到的答案

编辑:这里是它现在的一个示例

公共控制器:控制器
{
[HttpGet]
公共IActionResult索引()
{
返回视图();
}
[HttpGet]
public IActionResult GetData()
{
返回状态码(200,新的{value=1});
}
}
当超过1个用户使用网站时,索引正确呈现,调用超时或从未找到响应

路由配置:

applicationBuilder.UseMvc(路由=>
{
routes.MapRoute(名称:“cultureRoute”,
模板:“{culture}/{controller}/{action}/{id?}”,
默认值:新建{controller=“Logon”,action=“Index”},
限制:新的
{
culture=newregexrouteconstraint(“^[a-z]{2}(?:-[a-z]{2})?$”)
});
MapRoute(名称:“默认”,模板:“/{controller=Logon}/{action=Index}/{id?}”);
});

1天后,我发现了问题的根源,我们使用SignalR来同步用户之间的数据,出于某种未知的原因,当我禁用SignalR时,任何连接的用户都可以正常工作。那么,Signal如何在某一点阻止对API的所有请求呢?

“当有1个以上的用户使用该网站时,为什么MVC控制器中的API调用会中断”:我最好的猜测是,您的控制器中有一个bug。请包括复制相同版本的代码。1。请详细说明什么是“坏的”?你有什么错误吗?2.您是否配置了路由?“断开”是指我发送了请求,但请求超时或从未找到响应。是的,我在启动类中配置了路由。我们发现阻止请求的是信号器,当我们取消激活它时,一切正常,但是,我们没有找到解决方案。没有写日志,因为AJAX请求甚至没有到达API,因此AJAX请求超时。代码中没有错误,我们在不同的配置中对代码进行了数百次测试,代码工作正常,如果出现错误,就写日志。在这里,前端甚至没有调用代码,因为请求在某处被阻止,因此AJAX请求超时。当我们禁用signar时,API调用工作得很好,我们测试了3个用户同时连接,同时重新加载,没有bug。未知原因导致的信号器在某个点阻止API调用。