WCF сервис oData - скрыть элемент - PullRequest
2 голосов
/ 25 января 2011

Я новичок в WCF.Мой веб-проект имеет ADO.NET Entity Data Model (также известную как EF edmx) с именем контейнера сущностей JobSystemEntities.

Я создал простую службу данных oData WCF, которая использует JobSystemEntitiesон прекрасно работает:

public class JobService : DataService<JobSystemEntities>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("Jobs", EntitySetRights.ReadSingle);
    }

Однако это открывает все свойства задания.Я хотел бы скрыть конфиденциальные данные, например, поле / свойство / столбец Стоимость таблицы задания.

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Я публикую это, но поздно, но это может помочь другим.

Вы можете использовать атрибут IgnoreProperties http://msdn.microsoft.com/en-us/library/system.data.services.ignorepropertiesattribute.aspx в своем классе.

Для этого вам нужно будет определить частичный класс Job. Что-то в строках:

namespace DAL.Entities
{
    [IgnoreProperties("Cost")]
    public partial class Job
    {

    }
}
0 голосов
/ 14 февраля 2012

Я сделал что-то похожее на это. Хорошая отправная точка находится здесь:

http://weblogs.asp.net/rajbk/archive/2010/05/15/pre-filtering-and-shaping-odata-feeds-using-wcf-data-services-and-the-entity-framework-part-1.aspx

По сути, вам необходимо разделить защищенные свойства объекта на отдельный объект, связанный как свойство другого объекта. Как только это будет сделано, используйте перехватчик запросов, чтобы ограничить возможность просмотра этого защищенного объекта.

[QueryInterceptor("YourObjectsProtectedProperties")]
public Expression<Func<YourObjectsProtectedProperties, bool>> OnReadYourObjectsProtectedProperties()
{
if (ShowEntityToUser())
   return o => true == true;
return o => true == false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...