【问题标题】:ASP.NET core Web API routingASP.NET 核心 Web API 路由
【发布时间】:2020-01-25 08:21:10
【问题描述】:
  1. 使用“UseMvc”路由但无法调用控制器
  2. 在启动页面中添加了service.AddMvc 方法&在配置部分它是app.useMvc()
  3. 我无法路由,无法弄清楚问题所在

控制器代码在这里并且有路由:动作方法是Get,参数startDateTime类型

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<CurrencyContext>(cfg => {
                  cfg.UseSqlServer(_config.GetConnectionString("BitCoinIndexConnectionString"));
    });

    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseNodeModules(env);

    app.UseMvc(routes =>
                      {             
                          routes.MapRoute(name: "default",
                                          template: "api/{controller}/{action}/{start:DateTime}",
                                          defaults: new { 
                                                            controller = "Currency", 
                                                            action = "Get", 
                                                            start = DateTime.Now.AddDays(-14)});                          
                                                        });
                      }
}

[Route("api/[Controller]")]
public class CurrencyController : Controller
{
    private BitCoinRepository<BitCoinIndex> _repository;

    public CurrencyController(BitCoinRepository<BitCoinIndex> repository)
    {
        _repository = repository;
    }

    // GET: api/<controller>
    [HttpGet("{start}",Name ="Get")]
    public IActionResult Get(DateTime start)
    {
        // var bci =  _repository.GetByDates(start).ToDictionary(t => t.Date.ToString(), t => t.Rate);
        return View();    
    }
}

【问题讨论】:

  • @Priyanka 我应该更改我的答案以匹配您的最新编辑吗?
  • @AbdulG 是的,因为应用程序版本是 ASP.NET core 2.2 并且不包含 EnableEndpointRouting 的定义。
  • 已编辑答案,立即尝试。
  • 不要在Configure方法内添加路由到路由表

标签: asp.net-core asp.net-core-mvc asp.net-core-webapi


【解决方案1】:

我遇到了同样的问题并使用属性路由解决了它。这就是我所做的。如果您没有使用 .Net Core 3,请忽略第 1 点。

首先通过在您的ConfigureServices 中添加它来禁用端点路由:

services.AddMvc(options => options.EnableEndpointRouting = false);

您现在可以在Configure 方法中使用它

app.UseMvc();

接下来,只需在控制器内定义您的路由(请记住,我通常更喜欢通过向路由表添加路由来进行路由,但是在执行此“路由”时遇到了不必要的问题,属性路由是最简单的“路由”)。

[Route("api/myctrl")]
[ApiController]
public class MyControllerController : ControllerBase
{
    [HttpGet]
    [Route("getsomething")]
    public async Task<JsonResult> DoStuff()
    {

    }

}

使用@Url.Action("DoStuff", "MyController");/api/myctrl/getsomething 访问它

【讨论】:

  • 应用程序是 ASP.NET CORE 2.2 并且不包含 Mvc 选项 options.EnableEndpointRouting 的定义
  • 是的,它来自.net core 3。没问题,在这种情况下忽略这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 2020-01-24
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多