Web API 使用方法

1、添加Web Api 控制器 (控制器是继承ApiController的)

  控制器中的方法返回值可以是任意类型,如果是对象 前台接收的也是对应Json对象。

    更多详情参照: http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_1 

关于跨域请求:在chrome浏览器中  如果涉及跨域 会接收不到返回值 报错,这时候要在webapi 中自定义类:

  public class CrossSiteAttribute: System.Web.Http.Filters.ActionFilterAttribute
    {
        private const string Origin = "Origin";
       /// <summary>
       /// Access-Control-Allow-Origin是HTML5中定义的一种服务器端返回Response header,用来解决资源(比如字体)的跨域权限问题。
       /// </summary>
       private const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
       /// <summary>
       ///  originHeaderdefault的值可以使 URL 或 *,如果是 URL 则只会允许来自该 URL 的请求,* 则允许任何域的请求
       /// </summary>
       private const string originHeaderdefault = "*";
       /// <summary>
       /// 该方法允许api支持跨域调用
       /// </summary>
       /// <param name="actionExecutedContext"> 初始化 System.Web.Http.Filters.HttpActionExecutedContext 类的新实例。</param>
       public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
       {
           actionExecutedContext.Response.Headers.Add(AccessControlAllowOrigin, originHeaderdefault);
       }
}

然后在控制器中需要允许跨域的方法加上特性标签[ CrossSite]


2、控制器示例代码  

using api.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace api.Controllers
{
    public class ProductController : ApiController
    {
        Product[] products = new Product[]
       {
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
       };
        public IEnumerable<Product> GetAllProducts(string name)
        {
            return products;
        }
        [HttpGet] //控制请求方式
        public IEnumerable<Product> AllProducts()
        {
            return products; //返回集合
        }
        [HttpGet]
        public IHttpActionResult Test()
        {
            return Ok("123"); //返回字符串
        }
        public IHttpActionResult GetProduct(int id,string name) //返回值可以是任何类型,如果是对象,到前台就直接变成json对象了
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Json(product);//返回Json
        }
    }
}
3、配置WebApiConfig(MVC项目添加完webapi应该自动生成的)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace api
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
           // config.MapHttpAttributeRoutes();//这行自带的 要注释掉否则报错
            config.Routes.MapHttpRoute( 
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}",//-控制器-方法
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}
4、Global文件修改

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace api
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration); //添加在这里 添加在下面会报错
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值