.NET core 2.1 Web API 是不是支持基于约定的路由?
Posted
技术标签:
【中文标题】.NET core 2.1 Web API 是不是支持基于约定的路由?【英文标题】:Does .NET core 2.1 web API support convention based routing?.NET core 2.1 Web API 是否支持基于约定的路由? 【发布时间】:2020-01-03 22:44:33 【问题描述】:我是 Web API 和 .net 核心的新手,我的任务是开发 API。
所以我创建了一个默认的 Web API(框架:.NET Core 2.1)并尝试添加路由映射,但出现错误。
有人可以帮我安排路线。
注意:不能使用基于属性的路由,需要根据 MVC 中的约定处理路由
我的启动程序:
public class Startup
public Startup(IConfiguration configuration)
Configuration = configuration;
public IConfiguration Configuration get;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseHsts();
//app.UseHttpsRedirection();
app.UseMvc(routes =>
routes.MapRoute(
name: "default",
template: "controller/action/id?",
defaults: new controller = "Values", action = "dummyaction" );
);
这是我得到的错误:
InvalidOperationException:操作“myproject.Controllers.ValuesController.dummyaction (myproject)”没有属性路由。使用 ApiControllerAttribute 注解的控制器上的操作方法必须是属性路由。
【问题讨论】:
为什么不能使用属性路由?无论如何,没有基于约定的路由,例如具有Get
、Post
、Put
、Delete
等操作并让这些操作自动响应这些 HTTP 方法。
Chris Pratt 因此,如果我将所有操作方法替换为类似“dummyaction”的名称并在地图路线中,如果我将默认操作设置为“dummyaction”,我将能够执行基于约定的路由
我不确定你在说什么。
【参考方案1】:
我是怎么做到的
即使在使用地图路由后,我仍然收到有关基于属性的路由的错误
app.UseMvc(routes =>
routes.MapRoute(
name: "default",
template: "controller/action/id?",
defaults: new controller = "Values", action = "dummyaction" );
);
所以在错误中你能看到这一行“控制器上的操作方法 用 ApiControllerAttribute 注释的必须是属性路由。”
现在在我的控制器中,我通过删除我能够执行基于约定的路由来使用这个特定的注释/属性“[ApiController]”。
另外,我已经更新了如下路线
app.UseMvc(routes =>
routes.MapRoute(
name: "api",
template: "api/controller=Values/action=gogogo/id?");
);
参考:
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.2#mixed-routing-attribute-routing-vs-conventional-routing section(混合路由:属性路由 vs 常规路由)
asp.net core web api center routing
【讨论】:
【参考方案2】:您可以使用此示例进行操作
namespace TodoApi.Controllers
[Route("api/[controller]")]
[ApiController]
public class TodoController : Controller
[HttpGet("id")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
//do here
更多信息请关注link
【讨论】:
我的要求是不要将单个路由添加到控制器和操作,而是客户端想要一个全局路由。注意:我将使用 studentlist、editstudent 等名称,而不是 get、post、put 操作名称以上是关于.NET core 2.1 Web API 是不是支持基于约定的路由?的主要内容,如果未能解决你的问题,请参考以下文章
基于 .NET Framework 的 .NET Core 2.1 Web API 的授权问题
在 ASP.NET Core 2.1 Web API 中实现分页
在 Web Api Controller (.Net Core 2.1) 中获取声明和订阅
在 ASP .NET Core 2.1 Web Api 中启用 CORS
如何使用 fetch 将 FormData 从 javascript 发送到 ASP.NET Core 2.1 Web API