在 WebApiConfig.cs 加入
- config.Routes.MapHttpRoute(
- name: "RPCApi",
- routeTemplate: "services/{controller}/{action}/{keyword}",
- defaults: new { keyword = RouteParameter.Optional }
- );
services 是跟 api 的部分做個區隔,這裡要注意 controller 中的參數名稱也要叫 keyword,另外,因為把 action 加了回來所以方法必須標記使用的是 http get。
- [HttpGet]
- public IHttpActionResult GetFirstProductByKeyword(string keyword)
- {
- var product = products.FirstOrDefault((p) => p.Name.Contains(keyword));
- if (product == null)
- {
- return NotFound();
- }
- return Ok(product);
- }
- [HttpGet]
- public IHttpActionResult FindProductsByKeyword(string keyword)
- {
- var resultSet = products.Where((prod) => prod.Name.Contains(keyword));
- if (resultSet == null || resultSet.Count() == 0)
- {
- return NotFound();
- }
- return Ok<IEnumerable<Product>>(resultSet);
- }
這樣在 Jquery 處就可以正確取得服務了
- var rpc = 'services/products';
- ...
- function formatItem(item) {
- return item.Name + ': $' + item.Price;
- }
- ...
- function findFirstFitProductByKeyword() {
- var name = $('#productName').val();
- $.getJSON(rpc + '/GetFirstProductByKeyword/' + name)
- .done(function (data) {
- $('#displayProduct').text(formatItem(data));
- })
- .fail(function (jqXHR, textStatus, err) {
- $('#displayProduct').text('Error: ' + err);
- });
- }
- ...
完整專案:按我
ref:http://encosia.com/rest-vs-rpc-in-asp-net-web-api-who-cares-it-does-both/
沒有留言:
張貼留言