À l'époque où le style RestFul était répandu, la plupart des gens choisiraient d'utiliser la transmission de comparaison JSON, XML et JSON () pour les interfaces d'accueil. Voyons ce que ce blogueur a dit. Bien qu'il ne l'ait finalement pas terminé, Je pense que c'est probablement la même chose. Cela peut légèrement résoudre les doutes dans mon esprit.
1. En fait, il est très simple de faire en sorte que WebAPI renvoie des données au format JSON. Il suffit de le configurer dans la méthode ConfigureWebapi. Auparavant, deux espaces de noms devaient être référencés.
using Newtonsoft.Json.Serialization;using System.Linq;
2. Le code de base est le suivant :
var json = config.Formatters.JsonFormatter;// 解决json序列化时的循环引用问题json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;// 移除XML序列化器config.Formatters.Remove(config.Formatters.XmlFormatter);//设置序列化方式为驼峰命名法var jsonFormatter = config.Formatters.OfType<system.net.http.formatting.jsonmediatypeformatter>().First(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();// Web API 路由config.MapHttpAttributeRoutes();</system.net.http.formatting.jsonmediatypeformatter>
Le code complet est le suivant :
/// <summary>/// 配置WebApi/// </summary>/// <param>public void ConfigureWebapi(IAppBuilder app) {//创建一个HTTP的实例配置var config = new HttpConfiguration();var json = config.Formatters.JsonFormatter;// 解决json序列化时的循环引用问题json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;// 移除XML序列化器 config.Formatters.Remove(config.Formatters.XmlFormatter);//设置序列化方式为驼峰命名法var jsonFormatter = config.Formatters.OfType<system.net.http.formatting.jsonmediatypeformatter>().First(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();// Web API 路由 config.MapHttpAttributeRoutes();//映射路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );//将配置注入OWIN管道中 app.UseWebApi(config); }</system.net.http.formatting.jsonmediatypeformatter>
3. Testons-le ensuite, ajoutons un contrôleur nommé ProductController, supprimons toutes les méthodes et ajoutons une méthode GetProductList, le code est le suivant :
[HttpGet]public HttpResponseMessage GetProduct() {var product = new { id = 1, name = "三星王炸" }; HttpResponseMessage result = new HttpResponseMessage(); result.Content = new StringContent(JsonConvert.SerializeObject(product), Encoding.GetEncoding("UTF-8"), "application/json");return result; }
4. Parcourir Entrez http://localhost:27650/api/product/GetProduct dans le navigateur, et le résultat de sortie est
5. ://localhost dans le navigateur :27650/api/product Vous pouvez également obtenir la valeur de retour Transformons-la simplement et écrivons une nouvelle méthode
[HttpGet]public HttpResponseMessage GetProduct2(string id) {var product = new { id = id, name = "三星王炸" }; HttpResponseMessage result = new HttpResponseMessage(); result.Content = new StringContent(JsonConvert.SerializeObject(product), Encoding.GetEncoding("UTF-8"), "application/json");return result; }
6. Saisissez http : / dans le navigateur Les résultats obtenus par /localhost:27650/api/product?id=3 et http://localhost:27650/api/product sont respectivement
Pourquoi apparaît-il ? Qu'en est-il de ce phénomène ? Jetons un coup d'œil aux règles de routage que nous avons commencé à configurer WebAPI. La règle est api/{controller}/{id}, ce qui signifie que cette règle ne correspondra pas au nom du. action, mais sera basé sur le type de paramètres transmis. Cela dépend du nombre.
7. Alors, comment faire correspondre WebAPI en fonction du nom de la méthode ? Modifions les règles de routage :
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
8. Testons-le à nouveau. Entrez http://localhost:27650/api/product dans le navigateur pour voir l'effet.
Entrez ensuite http://localhost:27650/api/product/GetProduct et http://localhost:27650/api/product/GetProduct?id=5 et trouvé Les deux résultats renvoyés sont les mêmes, indiquant que la même méthode est accédée.
Saisissez ensuite http://localhost:27650/api/product/GetProduct2 et http://localhost:27650/api/product/GetProduct2?id= 6
Résultat :
Le test est réussi.
C'est juste pour organiser et approfondir l'impression au cas où vous oublieriez. S'il y a quelque chose d'incorrect, n'hésitez pas à nous donner votre avis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!