рдирдорд╕реНрддреЗред
рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЕрд░реНрдерд╛рддреН ApiController, рдореИрдВ рдЖрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ RESTFull Api рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рдУрдбрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдирдпрд╛ ASP MVC 4
рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВ:
public class Topic { public int Id { get; set; } public string Title { get; set; } }
рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ
ApiController рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ
рдорд┐рд▓рд╛ , рдЕрдм рддрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ:
public class TopicController : ApiController { }
рдЕрдм рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ:
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреАрдЖрдИ / рд╡рд┐рд╖рдп ред рдпрджрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдПрдХ GET рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
public class TopicController : ApiController { public ICollection<Topic> Get() { return new Collection<Topic> { new Topic { Id = 1, Title = " 1"}, new Topic { Id = 2, Title = " 2"} }; } }
рдпрджрд┐ рд╣рдо
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреАрдЖрдИ / рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ
рд╣реИрдВ , рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ:
<ArrayOfTopicModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ApiControllerTutorial.Models"> <TopicModel> <Id>1</Id> <Title> 1</Title> </TopicModel> <TopicModel> <Id>2</Id> <Title> 2</Title> </TopicModel> </ArrayOfTopicModel>
XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдордиреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ XML рдХреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ред рдЖрдЗрдП, JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреНрд░реЛрдорд┐рдпрдо -
рд░реАрд╕реНрдЯ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореИрдВ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреНрд▓рдЧ-рдЗрди / рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛)ред рд╣рдо
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдореЗрдВ
"json" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
[{"Id":1,"Title":" 1"},{"Id":2,"Title":" 2"}]
рд╣рдореЗрдВ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдорд┐рд▓рд╛ред рдХрд┐рд╕реА рдПрдХ рд╡рд┐рд╖рдп рдХреЛ рдЙрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ рдирдИ рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ:
public Topic Get(int id) { return new Topic { Id = id, Title = String.Format(" {0}", id) }; }
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреАрдЖрдИ / рд╡рд┐рд╖рдп / 5 рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрддреНрддрд░ рджреЗрдЧрд╛:
{"Id":5,"Title":" 5"}
рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ:
public string Put(Topic model) { return String.Format(" '{0}' !", model.Title); }
рдФрд░
рд╕реНрдерд╛рдиреАрдп рдЕрдиреБрд░реЛрдз
/ рдПрдкреАрдЖрдИ / рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ:
{'Title':' '}
рд╣рдо рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗ:
рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ -
PUT рдФрд░
рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ -
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / json (рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред рдпрд╣
рд╕рд╛рдордЧреНрд░реА рд╣реЗрдбрд░ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рдЗрдВрдбрд░ рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдП рдХрд┐ рдбреЗрдЯрд╛ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдпрд╛ рдерд╛ред , рдФрд░ рдЙрди рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рд╕реАрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП
рдПрдХреНрд╕реЗрдкреНрдЯ рдореЗрдВ рдХрдВрдЯреЗрдВрдЯ рдЯрд╛рдЗрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛)ред рдФрд░ рд╣рдо рдЬрд╡рд╛рдм рдореЗрдВ:
" ' ' !"
рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреА рдмрд╛рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рджреАред рдЖрдк рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ / рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ
HttpResponseMessage рднреА рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public HttpResponseMessage Put(Topic model) { if(String.IsNullOrEmpty(model.Title)) return new HttpResponseMessage(HttpStatusCode.BadRequest); return new HttpResponseMessage(HttpStatusCode.Created); }
рдореИрдВ
POST рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
PUT рд╕реЗ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред рдЕрдВрддрд┐рдо
DELETE рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ:
public string Delete(int id) { return String.Format(" {0} !", id); }
рдорд╛рд░реНрдЧ
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдмрд┐рдирд╛ рд╡рд┐рдзрд┐ рд╕рдорд░реНрдерди рдХреЗ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рджреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ:
public class TestRouteController : ApiController { public string GetTopic(int id) { return String.Format("Topic {0}", id); } public string GetComment(int id) { return String.Format("Comment {0}", id); } }
рдпрджрд┐ рд╣рдо
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреАрдЖрдИ / рдЯреЗрд╕реНрдЯреНрд░рд╛рдЙрдЯ / 5 рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
рдХрдИ рдХрд╛рд░реНрдп рдкрд╛рдП рдЧрдП рдЬреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИред рдЖрдЗрдП WebApiConfig.cs рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рджрд┐рдП рдЧрдП рдорд╛рд░реНрдЧ рдХреЛ рджреЗрдЦреЗрдВ:
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдбреЗрдлрд┐рдирд┐рд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдПрдХ рдФрд░ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:
config.Routes.MapHttpRoute( name: "DefaultApiWithAction", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ (
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреАрдЖрдИ / рдЯреЗрд╕реНрдЯреНрд░рд╛рдЙрдЯ / рдЧреЗрдЯрдЯреЙрдкрд┐рдХ / 5 ), рддреЛ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реЗрдЧреАред рдпрд╛ рдЖрдк
ActionName рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдорд╛рд░реНрдЧ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[ActionName("topic")] public string GetTopic(int id) { return String.Format("Topic {0}", id); }
рдЕрдм рдЖрдк
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреАрдЖрдИ / рдЯреЗрд╕реНрдЯрд╛рдЙрдЯ / рд╡рд┐рд╖рдп / 5 рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
OData
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдордирдорд╛рдиреА рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реАрд░рд┐рдпрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ
ActionResult рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЕрд╡рд╕рд░ рдЦреБрд▓рддрд╛ рд╣реИред рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ
рдУрдбрдЯрд╛ (
рдиреВрдЧреЗрдЯ ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
PM> рдЗрдВрд╕реНрдЯреЙрд▓-рдкреИрдХреЗрдЬ Microsoft.AspNet.WebApi.OData -Pre
рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ:
public class OdataController : ApiController { [Queryable] public IQueryable<Topic> Get() { return new EnumerableQuery<Topic>( new Collection<Topic> { new Topic{ Id = 1, Title = "1"}, new Topic{ Id = 2, Title = "2"}, new Topic{ Id = 3, Title = "3"}, new Topic{ Id = 4, Title = "4"}, new Topic{ Id = 5, Title = "5"} }); } }
рдЖрдЗрдП
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреА / рдУрдбреЗрдЯрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ:
[{"Id":1,"Title":"1"},{"Id":2,"Title":"2"},{"Id":3,"Title":"3"},{"Id":4,"Title":"4"},{"Id":5,"Title":"5"}]
рдХреБрдЫ рднреА рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реБрдЖред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣
IQueryable рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░
[Queryable] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдХреНрд╡реЗрд░реА рдореЗрдВ рд╕реАрдзреЗ OData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╡реЗрд░реА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рд╢реНрди рдХрд░реЗрдВ рдФрд░ рдЙрддреНрддрд░ рджреЗрдЦреЗрдВ:
рдЬрд╛рдВрдЪ | рдЬрд╡рд╛рдм рд╣реИ |
---|
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреА / рдУрдбрд╛рдЯрд╛ | [{"Id": 1, "рд╢реАрд░реНрд╖рдХ": "1"}, {"Id": 2, "рд╢реАрд░реНрд╖рдХ": "2"}, {"Id": 3, "рд╢реАрд░реНрд╖рдХ": "3"}, {"Id": 4, "рд╢реАрд░реНрд╖рдХ": "4"}, {"Id": 5, "рд╢реАрд░реНрд╖рдХ": "5"}] |
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреА / рдУрдбреЗрдЯрд╛ ? $ рд╕реНрдХрд┐рдк = 2 | [{"Id": 3, "рд╢реАрд░реНрд╖рдХ": "3"}, {"Id": 4, "рд╢реАрд░реНрд╖рдХ": "4"}, {"Id": 5, "рд╢реАрд░реНрд╖рдХ": "5"}] |
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреА / рдУрдбрд╛рдЯрд╛ ? $ рд╕реНрдХрд┐рдк = 1 рдФрд░ $ рдЯреЙрдк = 2 | [{"Id": 2, "рд╢реАрд░реНрд╖рдХ": "2"}, {"Id": 3, "рд╢реАрд░реНрд╖рдХ": "3"}] |
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреА / рдУрдбреЗрдЯрд╛ ? $ рдлрд╝рд┐рд▓реНрдЯрд░ = (рдЖрдИрдбреА gt 1) рдФрд░ (рдЖрдИрдбреА рд▓реЗрдлреНрдЯ рел) | [{"Id": 2, "рд╢реАрд░реНрд╖рдХ": "2"}, {"Id": 3, "рд╢реАрд░реНрд╖рдХ": "3"}, {"Id": 4, "рд╢реАрд░реНрд╖рдХ": "4"}] |
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдПрдкреА / рдУрдбрд╛рдЯрд╛ ? $ рдлрд╝рд┐рд▓реНрдЯрд░ = (рдЖрдИрдбреА gt 1) рдФрд░ (рдЖрдИрдбреА рд▓реЗрдлреНрдЯрд┐рдиреЗрдВрдЯ рел) рдФрд░ $ рдСрд░реНрдбрд░рдмреА = рдЖрдИрдбреАрд╕реА | [{"Id": 4, "рд╢реАрд░реНрд╖рдХ": "4"}, {"Id": 3, "рд╢реАрд░реНрд╖рдХ": "3"}, {"Id": 2, "рд╢реАрд░реНрд╖рдХ": "2"}] |
рдЬрд╛рджреВ, рд╣реИ рдирд╛?
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛:
http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1#sending_complex_typesOData рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА:
http://msdn.microsoft.com/en-us/library/ff478141.aspxрдкреБрд░рд╛рд▓реЗрдЦ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде:
yadi.sk/d/k2KaG0cL1fXhA