zoukankan      html  css  js  c++  java
  • 【WEBAPI】常用参数传递方法总结

    本部分纯属代码,如有疑问,请参考之前的BLOG文章

    一、C#部分

    1.1 实体类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    using System.Runtime.Serialization;
    using Newtonsoft.Json;
    
    namespace TestOauth.Models
    {
        //[Serializable]
        [DataContract]
        //[JsonObject(MemberSerialization.OptIn)]
        public class OAuthModels
        {
            public OAuthModels()
            {
    
            }
    
            //[DataMember]
            [JsonIgnore]
            public string ID
            {
                get;
                set;
            }
    
            //[JsonProperty(PropertyName = "oauth_consumer_key", NullValueHandling = NullValueHandling.Ignore)]
            [DataMember(Name = "oauth_consumer_key")]
            public string Consumer_key
            {
                get;
                set;
            }
    
            [JsonIgnore]
            public string Consumer_secret
            {
                get;
                set;
            }
    
            [JsonProperty(PropertyName = "oauth_signature_method", NullValueHandling = NullValueHandling.Ignore)]
            public string Signature_method
            {
                get;
                set;
            }
    
            [JsonProperty(PropertyName = "oauth_timestamp", NullValueHandling = NullValueHandling.Ignore)]
            public string Timestamp
            {
                get;
                set;
            }
    
            [JsonProperty(PropertyName = "oauth_nonce", NullValueHandling = NullValueHandling.Ignore)]
            public string Nonce
            {
                get;
                set;
            }
    
            [JsonProperty(PropertyName = "oauth_signature", NullValueHandling = NullValueHandling.Ignore)]
            public string Signature
            {
                get;
                set;
            }
    
            [JsonProperty(PropertyName = "oauth_token", NullValueHandling = NullValueHandling.Ignore)]
            public string Token
            {
                get;
                set;
            }
    
            [JsonProperty(PropertyName = "oauth_token_secret", NullValueHandling = NullValueHandling.Ignore)]
            public string Token_secret
            {
                get;
                set;
            }
        }
    }

    1.2 ACTION方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    using TestOauth.Models;
    using Newtonsoft.Json.Linq;
    
    namespace TestOauth.Controllers
    {
        public class WebAPITestController : ApiController
        {
            [HttpGet]
            public string TestGet()
            {
                return "HelloWorld";
            }
    
            [HttpGet]
            public OAuthModels TestGetString(string model)
            {
                OAuthModels d = Newtonsoft.Json.JsonConvert.DeserializeObject<OAuthModels>(model);
    
                d.Token = "requestkey";
    
                d.Token_secret = "requestsecret";
    
                return d;
            }
    
            [HttpPost]
            public OAuthModels TestPOSTString([FromBody]string model)
            {
                OAuthModels d = Newtonsoft.Json.JsonConvert.DeserializeObject<OAuthModels>(model);
    
                d.Token = "requestkey";
    
                d.Token_secret = "requestsecret";
    
                return d;
            }
    
            [HttpPost]
            public OAuthModels TestPOSTModel([FromBody]OAuthModels model)
            {
                model.Token = "requestkey";
    
                model.Token_secret = "requestsecret";
    
                return model;
            }
    
            /// <summary>
            /// didn't support this method
            /// </summary>
            /// <param name="model"></param>
            /// <param name="userToken"></param>
            /// <returns></returns>
            [HttpPost]
            public OAuthModels TestMultipleWithWrongMethod([FromBody]OAuthModels model, string userToken)
            {
                model.Token = "requestkey";
    
                model.Token_secret = "requestsecret";
    
                return model;
            }
    
            [HttpPost]
            public OAuthModels TestMultipleWithJObject(Newtonsoft.Json.Linq.JObject jobj)
            {
                dynamic d = jobj;
    
                JObject oauthModel = d.model;
    
                JObject oauthModel2 = d.model2;
    
                string token = d.userToken;
    
                var model = oauthModel2.ToObject<OAuthModels>();
    
                model.Token = "requestkey";
    
                model.Token_secret = "requestsecret";
    
                return model;
            }
    
    
            [HttpPost]
            public OAuthModels MyAction(HttpRequestMessage request)
            {
                // make explicit calls to get parameters from the request object
                int id = int.Parse(request.RequestUri.ParseQueryString().Get("id")); // need error logic!
    
                OAuthModels model = request.Content.ReadAsAsync<OAuthModels>().Result; // should be async!
    
                // Now use id and customer
    
                model.Token = "requestkey";
    
                model.Token_secret = "requestsecret";
    
                return model;
    
            }
    
    
        }
    }

    二、HTML部分

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>TestCase</title>
        <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
        <style type="text/css">
            * { margin: 0px; padding: 0px; font-size: 12px; }
        </style>    
    </head>
    <body>
        <div id="OutPut">
        </div>
        <h1>
            Passing single Parameters to a Web API Controller</h1>
        <div>
            <h2>
                测试 单一参数POST STRING 类型</h2>
            <input id="btnTestPostString" type="button" value="button" />
        </div>
        <div>
            <h2>
                测试 单一参数GET STRING 类型</h2>
            <input id="btnTestGetString" type="button" value="button" />
        </div>
        <div>
            <h2>
                测试 Test POST Model</h2>
            <input id="btnTestPOSTModel1" type="button" value="Using the Model Binder with plain POST values" />
            <input id="btnTestPOSTModel2" type="button" value="Using Web API JSON Formatter" />
        </div>
        <h1>
            Passing multiple Parameters to a Web API Controller</h1>
        <div>
            <h2>
                测试 多个参数 类型</h2>
            <input id="btnTestMultiple" type="button" value="Test Multiple parameters With JObject" />
        </div>
    </body>
    </html>

    三、JS部分

    <script type="text/javascript">
            jQuery(document).ready(function () {
    
                var formData = {
                    "oauth_signature": "signature from js form",
                    "oauth_timestamp": "timestamp from js form"
                };
    
                var model = {
                    "Signature": "signature from js model",
                    "Timestamp": "timestamp from js model"
                };
    
                $("#btnTestPostString").click(function () {
    
                    $.ajax({
                        type: "POST",
                        url: "http://localhost:9270/api/WebAPITest/TestPOSTString",
                        data: "=" + JSON.stringify(formData),
                        dataType: 'json',
                        success: function (data, textStatus, jqXHR) {
                            $("#OutPut").html(JSON.stringify(data));
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            $("#OutPut").html(errorThrown);
                        }
                    });
    
                });
    
                $("#btnTestGetString").click(function () {
    
                    $.ajax({
                        type: "GET",
                        url: "http://localhost:9270/api/WebAPITest/TestGetString",
                        data: "model=" + JSON.stringify(formData),
                        dataType: 'json',
                        success: function (data, textStatus, jqXHR) {
                            $("#OutPut").html(JSON.stringify(data));
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            $("#OutPut").html(errorThrown);
                        }
                    });
    
                });
    
                $("#btnTestPOSTModel1").click(function () {
    
                    $.ajax({
                        type: "POST",
                        url: "http://localhost:9270/api/WebAPITest/TestPOSTModel",
                        data: model,
                        dataType: 'json',
                        success: function (data, textStatus, jqXHR) {
                            $("#OutPut").html(JSON.stringify(data));
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            $("#OutPut").html(errorThrown);
                        }
                    });
    
                });
    
                $("#btnTestPOSTModel2").click(function () {
    
                    $.ajax({
                        type: "POST",
                        url: "http://localhost:9270/api/WebAPITest/TestPOSTModel",
                        //here cannot use JSON.stringify(model) -- mapping error
                        data: JSON.stringify(formData),
                        dataType: 'json',
                        contentType: "application/json",
                        success: function (data, textStatus, jqXHR) {
                            $("#OutPut").html(JSON.stringify(data));
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            $("#OutPut").html(errorThrown);
                        }
                    });
    
                });
    
                $("#btnTestMultiple").click(function () {
    
                    $.ajax({
                        type: "POST",
                        url: "http://localhost:9270/api/WebAPITest/TestMultipleWithJObject",
                        //here cannot use JSON.stringify(model) -- mapping error
                        data: JSON.stringify({
                            model: formData,
                            userToken: "testuserToken",
                            model2: {
                                "oauth_signature": "signature from js form model2",
                                "oauth_timestamp": "timestamp from js form model2"
                            }
                        }),
                        dataType: 'json',
                        contentType: "application/json",
                        success: function (data, textStatus, jqXHR) {
                            $("#OutPut").html(JSON.stringify(data));
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            $("#OutPut").html(errorThrown);
                        }
                    });
    
                });
    
            });
        </script>

    四、输出

  • 相关阅读:
    关于p标签
    用unescape反编码得出汉字
    一个未知高度垂直居中的简单方法
    发现个div float的小秘密
    w3cschool关于list-style-position时的另外发现
    oracle 11gR2默认密码修改
    程序员的十楼层。看看自己在第几层
    Steve Yegge:Google面试秘籍
    为学Linux,我看了这些书
    程序员的困境
  • 原文地址:https://www.cnblogs.com/taoqianbao/p/2931809.html
Copyright © 2011-2022 走看看