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

黄舟
Libérer: 2017-01-19 10:39:39
original
1273 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 :

<br>protected void Application_Start() <br>{ <br>AreaRegistration.RegisterAllAreas();
 <br>WebApiConfig.Register(GlobalConfiguration.Configuration); 
 <br>FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
 <br>RouteConfig.RegisterRoutes(RouteTable.Routes); 
 <br>// 使api返回为jsonGlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();} <br>
Copier après la connexion

Retour comme ça Les résultats 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 le faire. Définissez vous-même 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 Taiwan Balm)

Dans la première méthode, vous devez modifier la configuration et traiter le retour json valeur de type String. C'est très gênant, pourquoi 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, dans l'ordre ? ne pas l'écrire à plusieurs reprises dans chaque interface. Ces quelques lignes de code sont encapsulées dans une méthode afin qu'elle 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 et tous les formats XML renvoyés seront détruits S'il est perdu, la troisième méthode ne peut que supprimer le XML dans l'interface API et renvoyer 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 et recherchez la méthode Register(HttpConfiguration config)

et 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 :

<br>public static void Register(HttpConfiguration config) <br>{ <br>config.Routes.MapHttpRoute( 
<br>name: "DefaultApi", <br>routeTemplate: "api/{controller}/{action}/{id}", <br>defaults: new { 
id = RouteParameter.Optional } <br>);var jsonFormatter = new JsonMediaTypeFormatter();   
onfig.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));} <br>
Copier après la connexion

Méthode 3 Si le résultat est renvoyé Il est de type String, tel que 123, et le json renvoyé deviendra "123". La solution est la même que la méthode 1.

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.

Ce qui précède est le contenu des deux méthodes de définition du type de retour de l'API Web C# sur json. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


É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