整理记录一些
这里不是重点,就不直接展开了,要是想看……
新建完成之后,你可以直接运行项目。但是结果可能不是你想要的……
咱们选的是空模板,啥也没有就正常了。
这个项目到目前为止还没有添加任何静态文件,也就没有什么默认页面。那么对于
public static void Register(HttpConfiguration config)
{
// ……
// 添加“根节点”路由
config.Routes.MapHttpRoute(
name: "RootNode",
routeTemplate: "",
defaults: null,
constraints: null,
handler: new RootNodeRouteMessageHandler()
);
}
////// 根路由消息处理程序 /// 参考:https://learn.microsoft.com/zh-cn/aspnet/web-api/overview/advanced/http-message-handlers /// public class RootNodeRouteMessageHandler : DelegatingHandler { protected override TaskSendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var response = request.CreateResponse(System.Net.HttpStatusCode.OK); response.Content = new StringContent("这你都发现了……"); return Task.FromResult(response); } }
public class SimpleTypeController : ApiController
{
#region 布尔类型
[HttpGet, Route("api/SimpleType/TestBool1")]
public bool TestBool1()
{
return true;
}
[HttpGet, Route("api/SimpleType/TestBool2")]
public bool TestBool2()
{
return false;
}
#endregion
#region 数值类型
[HttpGet, Route("api/SimpleType/TestInt")]
public int TestInt()
{
return 666;
}
#endregion
#region 字符串类型
[HttpGet, Route("api/SimpleType/TestString")]
public string TestString()
{
return "我爱你中国";
}
#endregion
#region 时间类型
[HttpGet, Route("api/SimpleType/TestDateTime")]
public DateTime TestDateTime()
{
return DateTime.Now;
}
#endregion
#region 自定义实体类
public class PersonModel
{
public string Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
[HttpGet, Route("api/SimpleType/TestClass")]
public PersonModel TestClass()
{
return new PersonModel()
{
Id = "1",
UserName = "xiaodu114",
Password = "zhelishimima……",
};
}
#endregion
}
这里你会发现该API项目默认返回的
// 方式0
// API方法级别的控制。方法返回:HttpResponseMessage 并设置 Content-Type
// 方式1
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
// 方式2
config.Formatters.Remove(config.Formatters.XmlFormatter);
// 方式3
config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
// 方式4 config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(new JsonMediaTypeFormatter())); ////// JSON内容协商 /// 参考:https://www.cnblogs.com/acles/archive/2013/06/21/3147667.html /// public class JsonContentNegotiator : IContentNegotiator { private readonly JsonMediaTypeFormatter _jsonFormatter; public JsonContentNegotiator(JsonMediaTypeFormatter formatter) { _jsonFormatter = formatter; } public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerableformatters) { var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json")); return result; } }
在测试API返回实体类时(例如:人员实体),返回的属性名称首字母都是大写的。这对前端不是很友好……
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
注意:默认返回JSON的几种处理方式,方式1、2、3结合上面的代码都可以实现首字母小写。方式0没有测试。方式4不行。