Maison  >  Article  >  développement back-end  >  Deux méthodes pour définir le type de retour de l'API Web C# sur json

Deux méthodes pour définir le type de retour de l'API Web C# sur json

高洛峰
高洛峰original
2017-01-18 09:29:481219parcourir

Lorsque l'API Web écrit une interface API, le retour par défaut est de sérialiser votre objet et de le renvoyer sous forme XML. Alors, comment pouvez-vous le faire revenir en tant que json :
Méthode 1 : (Modifier la configuration). méthode)

Recherchez le fichier Global.asax et ajoutez une phrase dans la méthode Application_Start() :

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

Après modification :

protected void Application_Start() 
{ 
AreaRegistration.RegisterAllAreas(); 
WebApiConfig.Register(GlobalConfiguration.Configuration); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 
// 使api返回为json 
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 
}

Le résultat renvoyé est Ils sont tous de type json, mais il y a un inconvénient. Si le résultat renvoyé est de type String, comme 123, le json renvoyé deviendra "123" ;

La solution est de personnaliser le type de retour ( Le type de retour est HttpResponseMessage)

public HttpResponseMessage PostUserName(User user) 
{ 
String userName = user.userName; 
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json") }; 
return result; 
}

Méthode 2 : (Méthode des dix mille huiles d'or)

La méthode 1 nécessite de modifier la configuration et de traiter la valeur de retour json du type String, ce qui est très gênant, il vaut mieux ne pas utiliser l'objet de sérialisation automatique dans l'API web, le sérialiser vous-même puis le renvoyer

public HttpResponseMessage PostUser(User user) 
{ 
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string str = serializer.Serialize(user); 
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
return result; 
}

La méthode 2 est la méthode que je recommande davantage, afin de ne pas écrire ces phrases. à plusieurs reprises dans chaque code d'interface, il est donc encapsulé dans une méthode afin qu'il soit beaucoup plus pratique à utiliser.

public static HttpResponseMessage toJson(Object obj) 
{ 
String str; 
if (obj is String ||obj is Char) 
{ 
str = obj.ToString(); 
} 
else 
{ 
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
str = serializer.Serialize(obj); 
} 
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
return result; 
}

Troisième méthode : (la méthode la plus gênante)

La première méthode est la plus simple, mais elle est trop mortelle. Tous les formats XML renvoyés seront détruits, donc la troisième méthode est Vous pouvez. tuez simplement le XML dans l'interface API et renvoyez json

Écrivez d'abord une classe pour traiter le retour :

public class JsonContentNegotiator : IContentNegotiator 
{ 
private readonly JsonMediaTypeFormatter _jsonFormatter; 

public JsonContentNegotiator(JsonMediaTypeFormatter formatter) 
{ 
_jsonFormatter = formatter; 
} 

public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) 
{ 
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json")); 
return result; 
} 
}

Trouvez le fichier WebApiConfig.cs dans App_Start, ouvrez-le et recherchez Register( HttpConfiguration config )

Ajoutez le code suivant :

var jsonFormatter = new JsonMediaTypeFormatter(); 
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

Le code ajouté est le suivant :

public static void Register(HttpConfiguration config) 
{ 
config.Routes.MapHttpRoute( 
name: "DefaultApi", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: new { id = RouteParameter.Optional } 
); 
var jsonFormatter = new JsonMediaTypeFormatter(); 
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 
}

Méthode 3 Si le résultat renvoyé est de type String, tel que 123, le json renvoyé deviendra "123" et la solution est la même que celle de la première méthode.

En fait, l'API Web convertira automatiquement l'objet renvoyé en un formulaire où les formats XML et JSON coexistent. Les méthodes 1 et 3 éliminent le retour XML, tandis que la méthode 2 consiste à personnaliser le retour.

Pour plus d'articles sur les deux méthodes de définition du type de retour de l'API Web C# sur json, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn