Heim  >  Artikel  >  Backend-Entwicklung  >  Zwei Methoden zum Festlegen des C#-Web-API-Rückgabetyps auf JSON

Zwei Methoden zum Festlegen des C#-Web-API-Rückgabetyps auf JSON

黄舟
黄舟Original
2017-01-19 10:39:391219Durchsuche

Wenn eine Web-API eine API-Schnittstelle schreibt, besteht die Standardrückgabe darin, Ihr Objekt zu serialisieren und in XML-Form zurückzugeben. Wie können Sie es also als JSON zurückgeben?
Methode 1: (Konfiguration ändern Methode)

Suchen Sie die Datei Global.asax und fügen Sie einen Satz in der Methode Application_Start() hinzu:

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

Nach der Änderung:

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

Zurück so Die Ergebnisse sind alle vom Typ JSON, aber es gibt einen Nachteil. Wenn das zurückgegebene Ergebnis vom Typ String ist, z. B. 123, wird der zurückgegebene JSON zu „123“ Die Lösung besteht darin, dies zu tun Definieren Sie selbst den Rückgabetyp (der Rückgabetyp ist HttpResponseMessage)

Methode Zwei: (Taiwan Balm-Methode)
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;   
}

In Methode Eins müssen Sie die Konfiguration ändern und die JSON-Rückgabe verarbeiten Wert des String-Typs. Es ist sehr mühsam. Warum nicht das automatische Serialisierungsobjekt in der Web-API verwenden, es selbst serialisieren und dann zurückgeben? Methode 2 ist die Methode, die ich der Reihe nach empfehle es nicht wiederholt in jede Schnittstelle zu schreiben. Diese wenigen Codezeilen werden in eine Methode gekapselt, sodass sie viel bequemer zu verwenden ist.

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

Methode drei: (die problematischste Methode)

Methode eins ist die einfachste, aber zu tödlich, und alle zurückgegebenen XML-Formate werden zerstört Dann kann Methode drei einfach die API-Schnittstelle die XML-Datei löschen lassen und JSON zurückgeben.
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;   
}

Schreiben Sie zunächst eine Klasse, um die Rückgabe zu verarbeiten:


Suchen Sie die Datei WebApiConfig.cs in App_Start, Öffnen und Suchen Sie die Register(HttpConfiguration config)-Methode

und fügen Sie den folgenden Code hinzu:

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

Der hinzugefügte Code lautet wie folgt:

var jsonFormatter = new JsonMediaTypeFormatter();   
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
Methode 3 Wenn das Ergebnis zurückgegeben wird, ist es vom Typ String, z. B. 123, und der zurückgegebene JSON wird zu „123“. Die Lösung ist dieselbe wie bei Methode 1.


Tatsächlich konvertiert die Web-API das zurückgegebene Objekt automatisch in ein Formular, in dem die XML- und JSON-Formate nebeneinander existieren. Die Methoden 1 und 3 eliminieren die XML-Rückgabe, während Methode 2 darin besteht, die Rückgabe anzupassen.

<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>
Das Obige ist der Inhalt der beiden Methoden zum Festlegen des C#-Web-API-Rückgabetyps auf JSON. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn