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.
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.
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.
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.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With