ASP.NET 与 MVC 相同的路由不起作用

时间:2021-06-02 02:47:03

标签: c# asp.net-core asp.net-web-api

开始使用 React 学习 ASP.NET,但实际上我正在努力正确设置我的路由。

在 Startup.cs 文件中,我使用了我稍微修改的生成的路由模式:

app.UseEndpoints(endpoints =>
{
  endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action}");
});

在我的控制器中,我声明了 2 条我认为尊重模式的不同路由:

{
  [ApiController]
  [Route("[controller]/[action]")]
  public class WeatherForecastController : ControllerBase
  {
    private static readonly string[] Summaries = new[]
    {
    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", 
"Scorching"
    };

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
      var rng = new Random();
      return Enumerable.Range(1, 5).Select(index => new WeatherForecast
      {
        Date = DateTime.Now.AddDays(index * 2),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
      })
      .ToArray();
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Test()
    {
      var rng = new Random();
      return Enumerable.Range(1, 5).Select(index => new WeatherForecast
      {
        Date = DateTime.Now.AddDays(index * 2),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
      })
      .ToArray();
    }
  }
}

在我的 React 应用程序中,如果我这样做:

const response = await fetch('https://localhost:5001/weatherforecast/Get');
const data = await response.json();

它工作得很好,我得到了我需要的数据。但是如果我这样做:

const response = await fetch('https://localhost:5001/weatherforecast/Test');
const data = await response.json();

我一无所获。

所以基本上,这到底有什么问题?考虑到它是完全相同的部分 [相同的控制器]/[不同的动作],“测试”路线如何不返回任何内容?

1 个答案:

答案 0 :(得分:1)

我认为如果像这样声明上面每个方法的路由,我认为你的问题将得到解决:

[HttpGet]
[Route("/WeatherForecast/Get"]
public IEnumerable<WeatherForecast> Get()
{
  ....
}

[HttpGet]
[Route("/WeatherForecast/Test"]
public IEnumerable<WeatherForecast> Test()
{
  ....
}