在 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/
沒有留言:
張貼留言