API控制器块WebServer--设计相同

问题描述 投票:0回答:2

我准备用asp.net core 3.1搭建一个MVC API服务器。

我在默认的API控制器旁边有两个API控制器(由代码示例提供)。

  • WeatherController -- 代码示例
  • ReservationController-生成
  • UserController--手动构建

问题描述。

  1. 调用WeatherController--GET方法-->正确返回。
  2. 调用ReservationController--GET方法-->正确返回。
  3. 调用UserController--GET方法-->失败,REST客户端返回 "ErrorinAPI "消息。
  4. 调用ReservationController--GET方法-->缓慢返回(被阻止,直到第三次调用超时)

日志是开启的,但显然请求甚至没有击中UserController。调试模式没有进入,给定的方法没有记录日志信息)。

  • 我试着把Route定义改成精确的[Route("user")],但没有区别。
  • 我试着把UserController的GET方法改为返回一个简单的字符串,而不是IActionResult--没有变化,欢迎提出任何建议,因为我有点看不出其中的区别或错误。

Reservation Controller.UserController.GET方法返回一个简单的字符串,而不是IActionResult--没有变化,欢迎提出任何建议,因为我有点看不出有什么区别或错误。

[Route("api/[controller]")]
[ApiController]
public class Reservation : ControllerBase
{
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

UserController

[Route("api/[controller]")]
[ApiController]
public class User : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("Something returned");
    }
}

供参考Startup.cs相关内容。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            // Adding Serilog as logger service
            loggerFactory.AddSerilog();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHsts();

            app.UseRouting();
            app.UseAuthorization();
            app.UseHttpsRedirection();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
c# rest asp.net-core-3.0
2个回答
0
投票

你提到你是手动构建的。你的意思是你只是创建了一个类,然后把这些东西类型化复制进去?

你有没有试过右击并添加新控制器,然后用这种方式添加?当我看到ApiController时,我认为更多的是Web Api,而不是Controller(MVC),但我通常不会手动创建它们。

另外,你能不能试试把实际控制器上的路由改成[Route("api[controller][action]")]。

老实说,我不确定你的控制器是否被正确注册,但有时手动创建控制器的行为。

另外一个控制器的动作不应该像这样阻止另一个控制器的动作,所以我很好奇你的客户端。是在做循环还是什么?


0
投票

尝试重命名类。

public class Reservation : ControllerBase

改名为

public class ReservationController : ControllerBase

public class User : ControllerBase

public class UserController : ControllerBase
© www.soinside.com 2019 - 2024. All rights reserved.