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-19 10:39:391260parcourir

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 :

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

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;   
}

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;   
}

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;   
}


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;   
}   
}

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));

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>

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) !


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