asp.net-core - ASP.NET 核心 Web API 路由
问题描述
- 使用“UseMvc”路由但无法调用控制器
- 在启动页面中添加了
service.AddMvc
方法和配置部分app.useMvc()
- 我无法路由,也无法弄清楚问题所在
控制器代码在这里并且有路由:动作方法Get
带有参数类型start
DateTime
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();
}
}
解决方案
我遇到了同样的问题并使用属性路由解决了它。这就是我所做的。如果您不使用 .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
推荐阅读
- python - 在 pandas 中,根据表 B 中的条件获取表 A 中行索引的有效方法
- r - 如何减少ggplot2中的图例框宽度
- java - NetBeans 无法识别 JDK
- python - 用作包时未找到 Python 模块错误
- mysql - 仅对原始查询使用 sequelize
- ios - 如何确定我的手势识别器的位置是否在任何视图内?
- html - 为什么 text-align: center 在我的表格中不起作用?
- angular - 带参数的角度 10 路由和导航错误
- xamarin - Xamarin.Forms.Maps 未显示在已安装的包下
- python - 在while条件下的evey循环后将数据框附加到excel