1. 程式人生 > 實用技巧 >.net core webapi的引數設定

.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" });
});