2016-04-26 12 views
0

Nach diesem Tutorial deaktivieren: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/using-select-expand-and-valueWie C# ODataController Clientseite Abfrage

„Web-API-2 fügt Unterstützung für die $ erweitern, $ wählen und Wert $ Optionen in OData Diese Optionen einem Client ermöglichen, die zu steuern. Darstellung, dass es vom Server zurückkommt "

Meine Frage, wie kann ich die Darstellung Manipulation auf der Client-Seite getan deaktivieren. Mit anderen Worten, mein Server stellt sicher, dass die Filterung/Auswahl usw. richtig durchgeführt wird, und daher möchte ich nicht, dass die Clientseite dies erneut tut. Es ist mehr ein Overhead.

+0

Was ist, wenn Sie gerade nicht hinzufügen [Abfragbare] auf Verfahren zurück? – Uriil

+0

Ich habe kein [Queryable] -Attribut irgendwo aber – user3670419

+0

1) Können Sie Beispiel Ihres Controllers zur Verfügung stellen? 2) Warum brauchen Sie den OData Controller, wenn Sie seine Funktionen nicht nutzen wollen, wechseln Sie einfach zum regulären ApiController – Uriil

Antwort

1

Ich glaube, Sie den Zweck der Abfrage-Optionen wie $expand falsch verstehen, $select usw. Sie tun nicht Ursache Daten auf dem Client zu manipulieren. Sie sind vielmehr Anweisungen für den Dienst. In der OData-Implementierung der Web-API werden Abfrageoptionen normalerweise vom Attribut EnableQuery oder Queryable verarbeitet. Wenn Sie diese Attribute nicht verwenden, müssen Sie den Code für die Abfrageoptionen schreiben. Oder Sie sind frei, sie nicht zu unterstützen.

0

Sie können ein benutzerdefiniertes Attribut erstellen, das von EnableQueryAttribute erben würde, und dann die ValidateQuery-Methode überschreiben, um die zulässigen Abfrageoptionen sowie die zulässigen Funktionen und die Seitengröße einzuschränken.

using System.Net.Http; 
using System.Web.OData; 
using System.Web.OData.Query; 

public class SecureApiQueryAttribute : EnableQueryAttribute 
{ 
    public override void ValidateQuery(HttpRequestMessage request, ODataQueryOptions queryOptions) 
    { 
     base.AllowedQueryOptions = AllowedQueryOptions.None; 
     base.PageSize = 30; 
     base.AllowedFunctions = AllowedFunctions.AllFunctions; 
     base.ValidateQuery(request, queryOptions); 
    } 
} 

Dann können Sie diese benutzerdefinierte Attribute verwenden wie dieses

[SecureApiQuery] 
    public IHttpActionResult Get([FromODataUri] int? key = null) 
    { 
    } 
Verwandte Themen