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

高洛峰
Libérer: 2017-01-18 09:29:48
original
1210 Les gens l'ont consulté

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();
Copier après la connexion

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(); 
}
Copier après la connexion

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; 
}
Copier après la connexion

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; 
}
Copier après la connexion

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; 
}
Copier après la connexion

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; 
} 
}
Copier après la connexion

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));
Copier après la connexion

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)); 
}
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal