请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

ASP.NET Web API


ASP.NET MVC 4引入了几个新的项目类型,在我们最初选择要开发一个ASP.NET MVC Web应用程序的时候,可以新建一个Web API项目。

新建WebApi项目,并新建Api的控制器,如下:
public class ValuesController : ApiController {   // GET /api/values    public IEnumerable<string> Get() {        return new string[] { value1, value2 };    }    // GET /api/values/5    public string Get(int id) {        return value;    }    // POST /api/values    public void Post(string value) {}    // PUT /api/values/5    public void Put(int id, string value) {}    // DELETE /api/values/5    public void Delete(int id) {}}



通过这个项目,你可以发现一个新的Api的路由添加到RouteTable中的global.asax.cs中。


routes.MapHttpRoute(    name: DefaultApi,    routeTemplate: api/{controller}/{id},    defaults: new { id = RouteParameter.Optional });


运行该项目,并导航到~/api/values,你会看到一个XML的文件记录了列表的值。


<ArrayOfString>    <string>value1</string>    <string>value2</string></ArrayOfString>

而且值间是用JSON方式,在各个控制器传递的。
[value1,value2]

在ASP.NET MVC 4的Web API控制器类 – ApiController

创建一个新的Web API控制器类很简单,使用的配方中添加控制器ASP.NET MVC 4和,选择空API控制器Tempate
或者,你可以只创建一个通过添加项目,其中有一个新的Web API控制器类作为一个选项。
我创建了一个简单的ProductsController来处理所有的CRUD选项的产品。






public class ProductsController : ApiController {    private readonly IRepository<Product> _repository;    public ProductsController(IRepository<Product> repository) {        _repository = repository;    }    public IEnumerable<Product> Get() {        return _repository.Queryable();    }    public Product Get(int id) {        var product = _repository.Get(id);        if (product == null)            throw new HttpResponseException(HttpStatusCode.NotFound);        return product;    }    public HttpResponseMessage<Product> Post(Product product) {        _repository.Add(product);        var response = new HttpResponseMessage<Product>            (product, HttpStatusCode.Created);        response.Headers.Location = new Uri(Request.RequestUri,            Url.Route(null, new {id = product.Id}));        return response;    }    public Product Put(int id, Product product) {        var existingProduct = _repository.Get(id);        if (existingProduct == null)            throw new HttpResponseException(HttpStatusCode.NotFound);        _repository.Save(product);        return product;    }    public HttpResponseMessage Delete(int id) {        _repository.Delete(id);        return new HttpResponseMessage(HttpStatusCode.NoContent);    }}

你可以看到,在某些情况下,我只是返回一个Product在其他情况下,我返回更多信息HttpResponseMessage。例如,在一般情况下,我会返回产品的位置。在其他情况中,如果被请求的资源未找到,我也很抛出一个HttpResponseException异常。验证,记录和其他问题正在在各种ActionFilters完成,就像在正常的ASP.NET MVC项目一样。

ASP.NET Web ApI 的OData的分页查询

下面说的是分页查询,如果你想实现各种的分页查询功能,你可以适当的修改GetApiController,返回一个IQueryable<Product> as opposed to IEnumerable<Product>.接口的对象。
public IQueryable<Product> Get() {    return _repository.Queryable();}

现在,从您的浏览器,你可以添加分页,筛选,排序,和其他选项来塑造的数据。 下面是一个例子调用它的分页和排序。
api/products?$skip=2&$top=2&$orderby=Title

浏览器响应的XML请求是:

<ArrayOfProduct>    <Product>        <Id>3</Id>        <Title>RipStik</Title>        <Price>69.00</Price>    </Product>    <Product>        <Id>4</Id>        <Title>Shred Sled</Title>        <Price>49.00</Price>    </Product></ArrayOfProduct>


或者JSON请求如下:


[{Id:3,Price:69.00,Title:RipStik},{Id:4,Price:49.00,Title:Shred Sled}]

ASP.NET的Web API集成了ASP.NET MVC 4。 你可以很容易地使用的的新ApiController基类创建您的网站。
(翻译的不好请多多指正!)
英文地址:http://www.davidhayden.me/blog/asp.net-mvc-4-web-api-routes-and-apicontroller


作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。