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-18 09:29:481194Durchsuche

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:

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

Das zurückgegebene Ergebnis ist Sie 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, den Rückgabetyp anzupassen ( Der Rückgabetyp ist HttpResponseMessage)

Methode 2: (Zehntausend-Gold-Öl-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; 
}

Methode 1 erfordert eine Änderung der Konfiguration und die Verarbeitung des JSON-Rückgabewerts vom Typ String, was sehr ist problematisch, es ist besser, das automatische Serialisierungsobjekt in der Web-API nicht zu verwenden, es selbst zu serialisieren und es dann zurückzugeben

Methode 2 ist die Methode, die ich mehr empfehle, um diese Sätze nicht zu schreiben wiederholt in jedem Schnittstellencode, sodass es in einer Methode gekapselt ist, sodass es 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)
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; 
}

Methode eins ist die einfachste, aber zu tödlich. Alle zurückgegebenen XML-Formate werden zerstört, daher ist Methode drei möglich Beenden Sie einfach die XML-Datei in der API-Schnittstelle und geben Sie JSON zurück.

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

Suchen Sie die Datei WebApiConfig.cs in App_Start, öffnen Sie sie und suchen Sie nach Register( HttpConfiguration config)-Methode
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; 
} 
}

Fügen Sie den folgenden Code hinzu:

Der hinzugefügte Code lautet wie folgt:
var jsonFormatter = new JsonMediaTypeFormatter(); 
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

Methode 3 Wenn das zurückgegebene Ergebnis vom Typ String ist, B. 123, wird der zurückgegebene JSON zu „123“, und die Lösung ist dieselbe wie bei Methode eins.
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)); 
}

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

Weitere verwandte Artikel zu den beiden Methoden zum Festlegen des C#-Web-API-Rückgabetyps auf JSON finden Sie auf der chinesischen PHP-Website!

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