WebApi接口使用HttpGet方式实现接受实体类参数(原创)
WebApi接口使用HttpGet方式实现接受实体类参数(原创)
WebApi控制器接口使用HttpGet方法接受实体类参数
C# Code:
/// <summary>
/// WebApi控制器接口使用HttpGet方法接受实体类参数
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
[Route("get-by-model")]
public ModelResponse TestGetByModel(
[FromUri(BinderType = typeof(ModelBinderFromUri<ModelRequest>))]
ModelRequest request)
{
string data = request.Data;
string s = request.ActionID.ToString();
return new ModelResponse { Code = 0, Message = "操作完成.", Data = "返回请求的数据:"+ data };
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
/// <summary>
/// WebApi控制器接口使用HttpGet方法接受实体类参数
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
[Route("get-by-model")]
public ModelResponse TestGetByModel(
[FromUri(BinderType = typeof(ModelBinderFromUri<ModelRequest>))]
ModelRequest request)
{
string data = request.Data;
string s = request.ActionID.ToString();
return new ModelResponse { Code = 0, Message = "操作完成.", Data = "返回请求的数据:"+ data };
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
C# Code:
/// <summary>
/// 自定义ModelBinder处理程序
/// </summary>
/// <typeparam name="T"></typeparam>
public class ModelBinderFromUri<T> : System.Web.Http.ModelBinding.IModelBinder
{
public bool BindModel(HttpActionContext actionContext, System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
{
string JSON = "";
//使用GET方法是通过URL传递请求的数据(?参数)
if (actionContext.Request.Method.Method == "GET")
{
string uri = System.Web.HttpUtility.UrlDecode(actionContext.Request.RequestUri.Query.ToString());
if (!uri.IsNullOrEmpty() && uri.Length > 1)
{
if (uri.Substring(0, 1) == "?") //?{JSON字符串}
JSON = uri.Substring(1, uri.Length - 1);//去掉查询参数的?号
else
JSON = uri;
}
}
//使用POST方法是通过数据流传递数据
if (actionContext.Request.Method.Method == "POST")
{
using (StreamReader sr = new StreamReader(actionContext.Request.Content.ReadAsStreamAsync().Result))
{
JSON = sr.ReadToEnd();
}
}
try
{
//尝试将JSON转换为对象
T model = JsonConvert.DeserializeObject<T>(JSON);
//返回对象
bindingContext.Model = model;
}
catch (JsonReaderException)//JSON格式错误,抛出异常
{
throw new ResponseException(ErrorCodes.JsonFormatInvalide, ErrorCodes.JsonFormatInvalide_Msg);
}
return bindingContext.Model != null;
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
/// <summary>
/// 自定义ModelBinder处理程序
/// </summary>
/// <typeparam name="T"></typeparam>
public class ModelBinderFromUri<T> : System.Web.Http.ModelBinding.IModelBinder
{
public bool BindModel(HttpActionContext actionContext, System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
{
string JSON = "";
//使用GET方法是通过URL传递请求的数据(?参数)
if (actionContext.Request.Method.Method == "GET")
{
string uri = System.Web.HttpUtility.UrlDecode(actionContext.Request.RequestUri.Query.ToString());
if (!uri.IsNullOrEmpty() && uri.Length > 1)
{
if (uri.Substring(0, 1) == "?") //?{JSON字符串}
JSON = uri.Substring(1, uri.Length - 1);//去掉查询参数的?号
else
JSON = uri;
}
}
//使用POST方法是通过数据流传递数据
if (actionContext.Request.Method.Method == "POST")
{
using (StreamReader sr = new StreamReader(actionContext.Request.Content.ReadAsStreamAsync().Result))
{
JSON = sr.ReadToEnd();
}
}
try
{
//尝试将JSON转换为对象
T model = JsonConvert.DeserializeObject<T>(JSON);
//返回对象
bindingContext.Model = model;
}
catch (JsonReaderException)//JSON格式错误,抛出异常
{
throw new ResponseException(ErrorCodes.JsonFormatInvalide, ErrorCodes.JsonFormatInvalide_Msg);
}
return bindingContext.Model != null;
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
测试案例:
C# Code:
string url = "http://localhost:8899/api/testapi/get-by-model";
ModelRequest M = new ModelRequest();
M.ActionID = 100000;
M.ApiKey = "5cd31880a3f548ee9a8f37768bd6ebc8";
M.Data = "使用HttpGet方法接受实体类参数演示";
M.Sign = "s34df15cd31880a3f548ee9a8f37768bd6ebc8";
string JSON = JsonConvert.SerializeObject(M);
string result = WebApiTools.Get(url, JSON);
txtResponse.Text = result;
//来源:C/S框架网(www.csframework.com) QQ:1980854898
string url = "http://localhost:8899/api/testapi/get-by-model";
ModelRequest M = new ModelRequest();
M.ActionID = 100000;
M.ApiKey = "5cd31880a3f548ee9a8f37768bd6ebc8";
M.Data = "使用HttpGet方法接受实体类参数演示";
M.Sign = "s34df15cd31880a3f548ee9a8f37768bd6ebc8";
string JSON = JsonConvert.SerializeObject(M);
string result = WebApiTools.Get(url, JSON);
txtResponse.Text = result;
//来源:C/S框架网(www.csframework.com) QQ:1980854898



参考文档:
C# WebAPI控制器邮箱验证接口返回自动重定向HTML页面(原创)
WebApi开发框架:使用HttpGet方式调用WebAPI接口
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
原创文章:WebApi接口开发实例,搭建和部署WebApi接口
原创WebApi框架:采用HTTPS协议SelfHosting,Windows服务承载WebApi服务
C#.NET IP端口绑定SSL证书支持HTTPS协议(用于Win服务自承载WebApi服务器) - C/S框架网原创
原创产品-微信小程序APP服务端WebApi开发框架
客户端使用HTTPGET请求调用WebApi指定FromUri参数对象模型的接口
.Net后端框架|WebApi服务端开发框架|C/S框架网原创作品
CSFramework.WebApi客户端请求流程图|C/S开发框架
FileController – 文件管理控制器 | CSFramework.WebApi后端框架|C/S开发框架
ImageController – 图片资源控制器 | CSFramework.WebApi后端框架|C/S开发框架
WebApi NETCore框架 | APIProviderFactory 调用WebApi接口|C/S开发框架
1.1 什么是ASP.NET / WebAPI / MVC?|C/S开发框架
CSFramework.WebApi快速开发框架|APP后端开发框架 v2.0|C/S开发框架
CSFramework.WebAPI 后端框架系统架构图|C/S开发框架
C# WebAPI控制器邮箱验证接口返回自动重定向HTML页面(原创)
WebApi开发框架:使用HttpGet方式调用WebAPI接口
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
原创文章:WebApi接口开发实例,搭建和部署WebApi接口
原创WebApi框架:采用HTTPS协议SelfHosting,Windows服务承载WebApi服务
C#.NET IP端口绑定SSL证书支持HTTPS协议(用于Win服务自承载WebApi服务器) - C/S框架网原创
原创产品-微信小程序APP服务端WebApi开发框架
客户端使用HTTPGET请求调用WebApi指定FromUri参数对象模型的接口
.Net后端框架|WebApi服务端开发框架|C/S框架网原创作品
CSFramework.WebApi客户端请求流程图|C/S开发框架
FileController – 文件管理控制器 | CSFramework.WebApi后端框架|C/S开发框架
ImageController – 图片资源控制器 | CSFramework.WebApi后端框架|C/S开发框架
WebApi NETCore框架 | APIProviderFactory 调用WebApi接口|C/S开发框架
1.1 什么是ASP.NET / WebAPI / MVC?|C/S开发框架
CSFramework.WebApi快速开发框架|APP后端开发框架 v2.0|C/S开发框架
CSFramework.WebAPI 后端框架系统架构图|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
