Asp.Net Core WebAPI入门整理(四)参数获取

一、总结整理,本实例对应.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" });
});

更多:

Asp.Net Core WebAPI入门整理(三)跨域处理

Asp.Net Core WebAPI入门整理(二)简单示例

Asp.Net Core WebAPI入门整理(一)

原文地址:https://www.cnblogs.com/tianma3798/p/8303909.html