转自:https://www.cnblogs.com/tianma3798/p/8303909.html
一、总结整理,本实例对应.Net Core 2.0版本
1.在.Net Core WebAPI 中对于参数的获取及自动赋值,沿用了Asp.Net MVC的有点,既可以单个指定多个参数,右可以指定Model类类型接受
2.在.Net Core WebAPI 中可以对参数不指定FromUri,FromBody等
3.在.Net Core WebAPI中增加了简单路由参数指定模式,在【HttpGet("{id}/{name}")】 方法注释中,可以直接指定路由模板,然后在对应参数列表中自动赋值。
4.在.Net Core WebAPI中如果想添加复杂的路由控制,需要在StartUp启动文件中配置,和以前一样,指定路由约束、命名空间等。
二、多个参数接受示例,以HttpGet为参考
1.使用多个单数接受,也可使用类类型接受参数
注:在参数自动处理中,如果参数不存在或类型转换不正确则返回当前类型的默认值,如果是引用类型返回类型的空对象而不是null,也就是参数处理过程一般不抛出异常
[HttpGet("test")] public string Test(int id, string name, DateTime date) { return $"{id},{name},{date}"; } [HttpGet("TestTwo")] public TestParam Test2(TestParam model) { return model; } public class TestParam { public int ID { get; set; } public string Name { get; set; } public DateTime Date { get; set; } }
三、更方便方式,使用路由模板,处理地址栏和参数对应
[Produces("application/json")] [Route("api/Menu")] public class MenuController : Controller { ModelMenuContext _Context = new ModelMenuContext(); //1.获取对象 [HttpGet("{id}")] public Menu GetModel(int id) { Menu model = _Context.Menu.Find(id); if (model == null) throw new Exception($"获取id={id}的对象失败"); return model; } [HttpGet("{id}/{name}")] public string Test3(int id, string name) { return $"主键:{id},姓名:{name}"; } }
四、以更灵活方式,配置复杂的路由控制
在Startup.cs文件
默认配置
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //使用路由默认配置 app.UseMvc(); }
扩展处理
app.UseMvc(routes => { //扩展路由 routes.MapRoute( name: "about-route", template: "about", defaults: new { controller = "Home", action = "About" }); routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); });