asp.net web api

1:修改App_Start/WebApiConfig.cs文件,使用json以及修改路由

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


using System.Net.Http.Formatting;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;

namespace WebAPI
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            #region json formatter(bryan add)
            // Web API configuration and services
            var json = config.Formatters.JsonFormatter;
            // 解决json序列化时的循环引用问题
            json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            // 删除XML序列化器
            config.Formatters.Remove(config.Formatters.XmlFormatter);

            var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            #endregion


            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                //routeTemplate: "api/{controller}/{id}",
                //bryan add {action}
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

2:实现跨域调用

1)使用nuget安装Microsoft.AspNet.WebApi.Cors,安装的时候切记指定-Version 5.0.0版本,否则获取的最新5.2.2.0与其它低版本dll无法兼容

      相关命令:Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.0.0

      asp.net web api_第1张图片

      asp.net web api_第2张图片

2)配置web.config文件

    在system.webServer节点添加以下节点

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Max-Age" value="30"/>
        <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS"/>
        <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
      </customHeaders>
    </httpProtocol>

3:开发api接口

      

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

using System.Web.Script.Serialization;
using System.Text;
using System.IO;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;

using WebAPI.Models;
using System.Web.Http.Cors;
using System.Web;


namespace WebAPI.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class UserController : ApiController
    {
        /// <summary>
        /// test: http://localhost/yourproject/api/user/TestGet?pID=5&pName=1212
        /// </summary>
        /// <param name="pID"></param>
        /// <param name="pName"></param>
        /// <returns></returns>
        [HttpGet]
        public HttpResponseMessage TestGet(int pID, String pName)
        {
            try
            {
                APIResult temp = new APIResult();

                temp.ResultCode = 0;
                temp.ResultMessage = "ok";
                temp.ResultContent = "ok content";
                TestUser u = new TestUser();
                u.ID = pID;
                u.Name = pName;
                temp.ResultObject = JsonConvert.SerializeObject(u);

                temp.ResultObject = JsonConvert.SerializeObject(u);

                return Request.CreateResponse(HttpStatusCode.OK, temp);
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
            }
        }
        /// <summary>
        /// test: http://localhost/yourproject/api/user/TestPost
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public HttpResponseMessage TestPost()
        {
            try
            {
                APIResult temp = new APIResult();

                //获取传统context
                HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];
                //定义传统request对象
                HttpRequestBase request = context.Request;
                //--------------------------------------------- post data start
                string pd_content = "";
                string pd_password = "";

                if (request.Form.AllKeys.Contains("pd_content"))
                {
                    pd_content = request.Form["pd_content"];
                    byte[] b_pd = Convert.FromBase64String(pd_content);
                    pd_content = Encoding.Default.GetString(b_pd);

                    JObject jo = (JObject)JsonConvert.DeserializeObject(pd_content);
                    if (jo["password"] != null)
                    {
                        pd_password = jo["password"].ToString();
                    }
                    else
                    {
                        temp.ResultCode = 1;
                        temp.ResultMessage = "password not found.";
                    }
                }
                //--------------------------------------------- post data end

                temp.ResultCode = 1;
                temp.ResultMessage = pd_password;

                return Request.CreateResponse(HttpStatusCode.OK, temp);
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
            }
        }

    }
}


4:开发ajax调用测试(php)

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<link href="jquery-ui/css/jquery-ui-1.10.1.custom.css" rel="stylesheet">
<script src="jquery-ui/jquery-1.9.1.js"></script>
<script src="jquery-ui/jquery-ui-1.10.1.custom.js"></script>

<link href="jquery-ui/css/jquery-ui-1.10.1.custom.css" rel="stylesheet">
<script src="jquery-ui/jquery-1.9.1.js"></script>
<script src="jquery-ui/jquery-ui-1.10.1.custom.js"></script>

<?php 
function createjs()
{
	$arr_json = Array();
	$arr_json["password"] = "000000";
	return json_encode($arr_json);
}
$s_json = createjs();
$s_b64 = base64_encode($s_json);
?>


<script type="text/javascript">
var s_b64 = "<?php echo $s_b64;?>";
/**
 * api/user/Register_CheckPassword 
 */
function apiTest()
{
	$('#div_error').html("");
    //本地ajax調用
	var myurl = "http://localhost/yourproject/api/user/TestPost";
    $('#div_loading').html("<img src='loading.gif'>");
	$.ajax({
		type:"post",                 //请求方式
		url:myurl,                   //发送请求地址
		crossDomain: true,
		data:{
			pd_content: s_b64
		},
	    dataType:"json",	    
	    //请求成功后的回调函数有两个参数
	    success:function(data,textStatus){
	    	var jsonstr = JSON.stringify(data);
	    	$("#div_test").html(jsonstr);
	    },
	    //请求失败时将调用此方法
	    error:function(XMLHttpRequest, textStatus, errorThrown) {
	    	$('#div_error').html("<lable style=\"color: #FF0000;\">network error,please try again.</lable>");
	    },
	    //请求完成后回调函数 (请求成功或失败时均调用)
	    complete:function(XMLHttpRequest,textStatus){
	    	$('#div_loading').html("");
	    }
	});
}
</script>


<div>
<a href="javascript:apiTest();">test</a>
</div>

<div id="div_error"></div>
<br>
<div id="div_test"></div>
<br>
<div id="div_loading" style="width:16px;height:16px;"/>








你可能感兴趣的:(asp.net web api)