Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can we hide a property in WebAPI?

Tags:

I have a model say under

public class Device
{        
        public int DeviceId { get; set; }
        public string DeviceTokenIds { get; set; }
        public byte[] Data { get; set; }
        public string FilePwd { get; set; }        
}

Now I have a ASP.net Web API where there is a POST method as under

[HttpPost]
[Route("AddDeviceRegistrations")]
public void InsertDeviceRegistrations(Device device)

If I expose the WebAPI, obviously all the fields will be available e.g.

{
  "DeviceId": 1,
  "DeviceTokenIds": "sample string 2",
  "Data": "QEBA",
  "FilePwd": "sample string 3"
}

What I want is that, whenever I expose my WebAPI, the DeviceID should not get expose. I mean I am looking for

{

      "DeviceTokenIds": "sample string 2",
      "Data": "QEBA",
      "FilePwd": "sample string 3"
}

Is it possible? If so how?

I can solve the problem by changing the function signature as

public void InsertDeviceRegistrations(string deviceTokenIds, byte[] data, string FilePwd).

But I wanted to know if it can be possible or not ? If so , how?

Thanks in advance.

like image 312
priyanka.sarkar Avatar asked Jun 03 '15 03:06

priyanka.sarkar


People also ask

How can we hide a property in model for a particular view?

It is only possible to hide the property in the base class by using the new keyword if you want to provide custom logic or attributes for it.

How do I hide the action method in swagger?

By adding this attribute on a controller or action and specifying IgnoreApi = true , it gets hidden from auto-generated documentation. However, this user has to apply this to around 80 controllers.


2 Answers

I just figured out

[IgnoreDataMember]
 public int DeviceId { get; set; }

The namespace is System.Runtime.Serialization

More information IgnoreDataMemberAttribute Class

Learnt something new today.

Thanks All.

like image 186
priyanka.sarkar Avatar answered Oct 12 '22 23:10

priyanka.sarkar


There's good practice to use View Models for all GET/POST requests. In you case you should create class for receiving data in POST:

public class InsertDeviceViewModel
{        
    public string DeviceTokenIds { get; set; }
    public byte[] Data { get; set; }
    public string FilePwd { get; set; }        
}

and then map data from view model to you business model Device.

like image 27
rnofenko Avatar answered Oct 13 '22 00:10

rnofenko