using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Sers.Core.Module.Api;
using Sers.Core.Module.Rpc;
using Vit.Core.Util.ComponentModel.Data;
using Vit.Core.Util.ComponentModel.Model;
namespace Did.Serslot.Demo.Controllers
{
[Route("did_serslot/[controller]")]
[Route("did_serslot/v1")]
[ApiController]
public class ValuesController : ControllerBase
{
#region (x.1)route
///
/// GET did_serslot/Values
///
///
[HttpGet]
[HttpPost]
public object Route0([FromQuery]string a)
{
//var requestFeature = Request.HttpContext.Features.Get();
return "GET did_serslot/Values?a=" + a;
}
///
/// GET did_serslot/Values/route_x
///
///
[HttpGet("101/route")]
[HttpGet("102/route")]
[HttpGet("/did_serslot/Values/103/route")]
public object Route1()
{
return new
{
Request.Path,
Request.Method
};
}
///
/// GET did_serslot/Values/route104
///
///
[HttpGet("[action]")]
public object route104()
{
return new
{
name = "GET did_serslot/Values/route104",
Request.Path,
Request.Method
};
}
#endregion
#region (x.2)Name和Desc
///
/// 演示 如何使用Name 和 Description。
/// 函数注释和使用SsDescription是一样的效果。
///
///
[HttpGet("201/NameDesc")]
[SsName("NameDesc1")]
public ApiReturn NameDesc()
{
return new ApiReturn();
}
///
///
///
///
[HttpGet("202/NameDesc")]
[SsDescription("演示 如何使用Name 和 Description。\n函数注释和使用SsDescription是一样的效果。")]
public ApiReturn NameDesc2()
{
return new ApiReturn();
}
#endregion
#region (x.3) 参数
#region (x.x.1) 从route获取参数
///
/// 从route获取参数
/// GET did_serslot/Values/301/arg/{id}/{id2}
///
///
[HttpGet("301/arg/{name}/{age}")]
public object Arg301(
[SsExample("lith"), SsDefaultValue("NoName"), SsDescription("姓名")]string name,
[SsExample("30"), SsDefaultValue("0"), SsDescription("年龄,请指定在16-50中间的整数")]int age)
{
return new
{
Request.Path,
Request.Method,
request = new { name, age }
};
}
#endregion
#region (x.x.2)从Query String获取参数
///
/// 从Query String获取参数
/// GET did_serslot/Values/302/arg?name=lith&age=30
///
///
[HttpGet("302/arg")]
public object Arg302(
[FromQuery, SsExample("lith"),SsDescription("姓名")]string name,
[FromQuery, SsExample("30"), SsDescription("年龄,请指定在16-50中间的整数")]int age)
{
return new
{
Request.Path,
Request.Method,
request = new { name, age }
};
}
#endregion
#region (x.x.3)从Body获取参数
///
/// 从Body获取参数
/// POST did_serslot/Values/303/arg
///
///
[HttpPost("303/arg")]
public object Arg3([FromBody, SsExample("\"lith\""), SsDescription("姓名,请以双引号开始和结束")]string name)
{
return new
{
Request.Path,
Request.Method,
request = new { name }
};
}
#endregion
#region (x.x.4)从Body获取参数
///
/// 从Body获取参数
/// POST did_serslot/Values/304/arg
///
///
[HttpPost("304/arg")]
public object Arg4([FromBody] ArgModel arg)
{
return new
{
Request.Path,
Request.Method,
request = arg
};
}
public class ArgModel
{
///
/// 姓名
///
[SsExample("lith"), SsDefaultValue("NoName")]
[JsonProperty("arg")]
public string name { get; set; }
///
///
///
[SsExample("20"), SsDefaultValue("0"), SsDescription("年龄,请指定在16-50中间的整数")]
public int age;
}
#endregion
#region (x.x.5)从Form获取参数
///
/// 从Form获取参数
/// POST did_serslot/Values/304/arg
///
///
[HttpPost("305/arg")]
public object Arg5([FromForm]ArgModel arg)
{
return new
{
Request.Path,
Request.Method,
request = arg
};
}
#endregion
#endregion
#region (x.4) 返回值
#region (x.x.1)返回值注释
///
///
///
///
[HttpGet("401/ret")]
[return: SsExample("test1"), SsDescription("返回test1")]
public string Return4()
{
return "test1";
}
///
///
///
///
[HttpGet("402/ret")]
[return: SsExample("5"), SsDescription("返回5")]
public int Return5()
{
return 5;
}
///
///
///
///
[HttpGet("403/ret")]
[return: /*SsExample("{\"name\":\"张三\"}"),*/ SsDescription("返回模型数据")]
public ReturnData Return6()
{
return new ReturnData { name = "张三" };
}
///
/// Return注释-FromType
///
public class ReturnData
{
///
/// 姓名
///
[SsExample("lith"), SsDefaultValue("NoName")]
public string name { get; set; }
}
#endregion
#region (x.x.2)异步返回
///
/// GET did_serslot/Values/201/result
///
///
[HttpGet("420/result")]
public object Result1()
{
return Request.Method + " " + Request.Path;
}
///
/// GET did_serslot/Values/202/result
///
///
[HttpGet("421/result")]
public ActionResult Result2()
{
return Request.Method + " " + Request.Path;
}
///
/// GET did_serslot/Values/203/result
///
///
[HttpGet("422/result")]
public ActionResult> Result3()
{
return new string[] { Request.Method + " " + Request.Path, "" };
}
///
/// GET did_serslot/Values/204/result
///
///
[HttpGet("423/result")]
public async Task Result4()
{
await Task.Run(() => { Thread.Sleep(2000); });
return Request.Method + " " + Request.Path;
}
///
/// GET did_serslot/Values/205/result
///
///
[HttpGet("424/result")]
public async Task> Result5()
{
await Task.Run(() => { Thread.Sleep(2000); });
return Request.Method + " " + Request.Path;
}
#endregion
#endregion
#region (x.5)指定参数或返回值类型
///
/// 指定参数或返回值类型
///
///
[HttpGet("500/type")]
[return: SsType(typeof(List)),SsExample("[5,6]"), SsDescription("返回原值")]
public string Type(
[SsType(typeof(List)), SsExample("[5,6]"), SsDescription("id数组")]string ids
)
{
return ids;
}
#endregion
#region (x.6) HttpMethod
///
/// GET did_serslot/Values/600/method
///
///
[HttpGet("600/method")]
public string Method_Get()
{
return Request.Method + " " + Request.Path;
}
///
/// POST did_serslot/Values/600/method
///
///
[HttpPost("600/method")]
public string Method_Post()
{
return Request.Method + " " + Request.Path;
}
///
/// Put did_serslot/Values/600/method
///
///
[HttpPut("600/method")]
public string Method_Put()
{
return Request.Method + " " + Request.Path;
}
///
/// Delete did_serslot/Values/600/method
///
///
[HttpDelete("600/method")]
public string Method_Delete()
{
return Request.Method + " " + Request.Path;
}
/////
///// Head did_serslot/Values/600/method
/////
/////
//[HttpHead("600/method")]
//public string Method_Head()
//{
// return Request.Method + " " + Request.Path;
//}
///
/// Options did_serslot/Values/600/method
///
///
[HttpOptions("600/method")]
public string Method_Options()
{
return Request.Method + " " + Request.Path;
}
///
/// Patch did_serslot/Values/600/method
///
///
[HttpPatch("600/method")]
public string Method_Patch()
{
return Request.Method + " " + Request.Path;
}
///
/// get|post did_serslot/Values/601/method
///
///
[Route("601/method")]
[HttpGet, HttpPost]
public string Method2()
{
return Request.Method + " " + Request.Path;
}
#endregion
#region (x.7)ApiClient
#region (x.x.1)ApiClient示例,调用其他接口
///
/// ApiClient示例,调用其他接口
///
///
[HttpPost("700/ApiClient700")]
public ApiReturn