开发者

ASP.NET AJAX: How to limit amount of properties transfered to client

开发者 https://www.devze.com 2023-01-30 10:02 出处:网络
My web method returns object \'User\' that has a lot of properties: Id, Nick, Email, FirstName, SecondName, etc...

My web method returns object 'User' that has a lot of properties: Id, Nick, Email, FirstName, SecondName, etc...

[WebMethod]
public 开发者_运维知识库User GetUserById(int userId)
{
    vfm_elita.elita_table.user.User user =
        vfm_elita.elita_table.user.User.GetUserById(userId);
    return user;
}

Is there any possibility to limit amount of properties returned? Or I should to create a separate class (UserForClientForParticular) that has only required properties?

Thanks.

P.S. Guess, my last idea will be the suggested answer :), but anyway, any thoughts are welcome


It's a good idea to use a data transfer object, specialized to expose only the properties that the client-side should know about. Alternatively, if you're prototyping, in a hurry, or don't want to create a DTO class for some other reason, you can use an anonymous type to pare down the response:

[WebMethod]
public object GetUserById(int userId)
{
  vfm_elita.elita_table.user.User user =
    vfm_elita.elita_table.user.User.GetUserById(userId);

  // Will return something like {"Nick":"Encosia","FirstName":"Dave"}
  return new { Nick = user.Nick, FirstName = user.FirstName };
}


You should always be very aware of what data you expose in your APIs, especially if there's a chance that they'll be consumed by external parties but even if they are only used internally. I would definitely recommend what you mentioned in your post and create a construct designed to expose only the data that is necessary in this context.

Update: also recommend taking a look at the AutoMapper project on codeplex that handles automatically mapping property values from one object (User) to another object (UserSummary).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号